home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / inter36a.zip / INTERRUP.B < prev    next >
Text File  |  1993-08-01  |  243KB  |  6,228 lines

  1. Interrupt List, part 2 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------t-15---------------------------------
  4. INT 15 - Microsoft TSR Specification
  5.     No additional information available at this time.
  6. --------B-1500-------------------------------
  7. INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
  8.     AH = 00h
  9. Return: CF set on error
  10.         AH = 86h no cassette present
  11.     CF clear if successful
  12. SeeAlso: AH=01h"CASSETTE"
  13. --------M-1500-------------------------------
  14. INT 15 - Amstrad PC1512 - GET AND RESET MOUSE COUNTS
  15.     AH = 00h
  16. Return: CX = signed X count
  17.     DX = signed Y count
  18. --------O-1500-------------------------------
  19. INT 15 - VMiX v2+ - INSTALLATION CHECK
  20.     AH = 00h
  21. Return: DX = 0798h if installed
  22.         AX = version (AH = major, AL = minor)
  23. --------T-1500-------------------------------
  24. INT 15 - MultiDOS Plus - GIVE UP TIME SLICE
  25.     AH = 00h
  26. Note:    if issued by the highest-priority task while MultiDOS is using
  27.       priority-based rather than round-robin scheduling, control will be
  28.       returned to the caller immediately
  29. SeeAlso: AH=03h"MultiDOS",AX=1000h
  30. --------B-1501-------------------------------
  31. INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
  32.     AH = 01h
  33. Return: CF set on error
  34.         AH = 86h no cassette present
  35.     CF clear if successful
  36. SeeAlso: AH=00h"CASSETTE"
  37. --------b-1501-------------------------------
  38. INT 15 - Amstrad PC1512 - WRITE DATA TO NON-VOLATILE RAM
  39.     AH = 01h
  40.     AL = NVRAM location (00h to 3Fh)
  41.     BL = NVRAM data value
  42. Return: AH = return code
  43.         00h OK
  44.         01h address bad
  45.         02h write error
  46. SeeAlso: AH=02h"Amstrad"
  47.  
  48. Format of NVRAM:
  49. Offset    Size    Description
  50.  00h    BYTE    time of day: seconds
  51.  01h    BYTE    alarm time: seconds
  52.  02h    BYTE    time of day: minutes
  53.  03h    BYTE    alarm time: minutes
  54.  04h    BYTE    time of day: hours
  55.  05h    BYTE    alarm time: hours
  56.  06h    BYTE    day of week, 1 = Sunday
  57.  07h    BYTE    day of month
  58.  08h    BYTE    month
  59.  09h    BYTE    year mod 100
  60.  0Ah    BYTE    RTC status register A
  61.         bit 7: set if date/time being updated
  62.         bits 6-4: time base speed, default 010 = 32768 Hz
  63.         bits 3-0: interrupt rate selection, default 0110 = 1024 Hz
  64.  0Bh    BYTE    RTC status register B (see below)
  65.  0Ch    BYTE    RTC status register C (read-only)
  66.         bit 7: IRQF flag
  67.         bit 6: PF flag
  68.         bit 5: AF flag
  69.         bit 4: UF flag
  70.  0Dh    BYTE    RTC status register D
  71.         bit 7: battery good
  72.  0Eh  6 BYTEs    time and date machine last used
  73.  14h    BYTE    user RAM checksum
  74.  15h    WORD    Enter key scancode/ASCII code
  75.  17h    WORD    Forward delete key scancode/ASCII code
  76.  19h    WORD    Joystick fire button 1 scancode/ASCII code
  77.  1Bh    WORD    Joystick fire button 2 scancode/ASCII code
  78.  1Dh    WORD    mouse button 1 scancode/ASCII code
  79.  1Fh    WORD    mouse button 2 scancode/ASCII code
  80.  21h    BYTE    mouse X scaling factor
  81.  22h    BYTE    mouse Y scaling factor
  82.  23h    BYTE    initial VDU mode and drive count
  83.  24h    BYTE    initial VDU character attribute
  84.  25h    BYTE    size of RAM disk in 2K blocks
  85.  26h    BYTE    initial system UART setup byte
  86.  27h    BYTE    initial external UART setup byte
  87.  28h 24 BYTEs    available for user application
  88. Note:    bytes 00h-0Dh are the same on the IBM AT as they are used/updated by
  89.       the clock chip
  90.  
  91. Bitfields for RTC status register B:
  92.  bit 7    clear if normal update, set if abort update
  93.  bit 6    periodic interrupt enable
  94.  bit 5    alarm interrupt enable
  95.  bit 4    update end interrupt enable
  96.  bit 3    square wave enable
  97.  bit 2    date mode (clear = BCD, set = binary)
  98.  bit 1    24-hour format
  99.  bit 0    daylight saving time enable
  100. --------O-1501-------------------------------
  101. INT 15 - VMiX - "sys_chanreq" - I/O CHANNEL OBJECT MANAGER
  102.     AH = 01h
  103.     STACK:    WORD    object ID of requestor
  104.         DWORD    pointer to ASCIZ name of requested method
  105.             "assign" assign channel to object
  106.             "deassign" deassign channel
  107.             "cursor" set cursor on/off
  108.             "init" initialize comm port
  109.             "open" open I/O channel
  110.             "position" set cursor position
  111.             "receive" get buffered packet from comm port
  112.             "send" send buffered packet to comm port
  113.             "vio" set current virtual I/O to specified channel
  114.             "window" make window at cursor position
  115.         ---if "assign"---
  116.          WORD    object UID
  117.          WORD    caller UID/PID
  118.          DWORD    CSL with port
  119.         ---if "deassign"---
  120.          WORD    channel ID
  121.         ---if "cursor"---
  122.          WORD    channel ID (must be a SRCSINK)
  123.          WORD    new state (0000h off, 0001h on)
  124.         ---if "init"---
  125.          WORD    channel ID (must be a SRCSINK)
  126.          WORD    comm port number (00h-03h)
  127.          WORD    UART init code
  128.         ---if "open"---
  129.          WORD    channel ID
  130.         ---if "position"---
  131.          WORD    channel ID (must be a SRCSINK)
  132.          WORD    position (high byte = row, low byte = column)
  133.         ---if "receive"---
  134.          DWORD    pointer to buffer
  135.         ---if "send"---
  136.          WORD    length of buffer
  137.          DWORD    pointer to buffer
  138.         ---if "vio"---
  139.          WORD    channel ID (must be a SRCSINK)
  140.         ---if "window"---
  141.          WORD    top left (high byte = row, low byte = column)
  142.          WORD    bottom right (high byte = row, low byte = column)
  143. Return: DX:AX -> IRP structure or 0000h:0000h
  144. SeeAlso: AH=00h"VMiX",AH=02h"VMiX"
  145. --------T-1501-------------------------------
  146. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE
  147.     AH = 01h
  148.     AL = semaphore number (00h-3Fh)
  149. Return: AH = status
  150.         00h successful
  151.         02h invalid semaphore number
  152. Notes:    if the semaphore is not owned, ownership is assigned to the calling
  153.       task and the call returns immediately
  154.     if the semaphore is already owned by another task, the calling task
  155.       is placed on a queue for the semaphore and suspended until it can
  156.       become owner of the semaphore
  157.     semaphore 0 is used internally by MultiDOS to synchronize DOS access
  158. SeeAlso: AH=02h"MultiDOS",AH=10h"MultiDOS",AH=1Bh"MultiDOS"
  159. --------B-1502-------------------------------
  160. INT 15 - CASSETTE - READ DATA (PC and PCjr only)
  161.     AH = 02h
  162.     CX = number of bytes to read
  163.     ES:BX -> buffer
  164. Return: CF clear if successful
  165.         DX = number of bytes read
  166.         ES:BX -> byte following last byte read
  167.     CF set on error
  168.     AH = status (see below)
  169. SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE"
  170.  
  171. Values for status:
  172.  00h    successful
  173.  01h    CRC error
  174.  02h    bad tape signals
  175.  04h    no data
  176.  80h    invalid command
  177.  86h    no cassette present
  178. --------b-1502-------------------------------
  179. INT 15 - Amstrad PC1512 - READ DATA FROM NON-VOLATILE RAM
  180.     AH = 02h
  181.     AL = NVRAM location (00h to 3Fh)
  182. Return: AH = return code
  183.         00h OK
  184.         01h address bad
  185.         02h checksum error
  186.     AL = NVRAM data value
  187. SeeAlso: AH=01h"Amstrad"
  188. --------O-1502-------------------------------
  189. INT 15 - VMiX - "sys_memreq" - MEMORY OBJECT MANAGER
  190.     AH = 02h
  191.     STACK:    WORD    object ID of requestor
  192.         DWORD    pointer to ASCIZ name of requested method
  193.             "assign" allocate low memory block
  194.             "assign extended" allocate extended memory pages
  195.             "assign gdt" allocate GDT selector
  196.             "paged" allocate low paged memory
  197.             "paged extended" alllocate extended memory pages
  198.             "deassign" free memory block
  199.             "deassign gdt" free GDT selector
  200.             "getvpage" get physical address for virtual page
  201.             "setvpage" set physical address for virtual page
  202.             "info" get VMiX memory usage info block
  203.             "move" move contents of 32-bit memory
  204.             "newmcb" make new DOS memory control block
  205.             "owner" get process ID of MCB or PSP owner
  206.             "umb" allocate upper memory block
  207.             "video" toggle system use of vidoe memory and get stat
  208.         ---if "assign"---
  209.          WORD    number of objects
  210.          WORD    size in bytes (multiple of 512 bytes)
  211.         ---if "assign extended"---
  212.          WORD    number of objects
  213.          WORD    size in bytes (multiple of 4K)
  214.         ---if "assign gdt"---
  215.          WORD    access type (low byte)
  216.          WORD    segment size in paragraphs
  217.          DWORD    pointer to start of physical segment
  218.         ---if "paged"---
  219.          WORD    number of 512-byte pages
  220.         ---if "paged extended"
  221.          WORD    number of 4K pages
  222.         ---if "deassign"---
  223.          DWORD    pointer returned by previous allocation call
  224.         ---if "deassign gdt"---
  225.          WORD    GDT selector
  226.         ---if "getvpage"---
  227.          WORD    owner's process ID
  228.          DWORD    pointer to buffer for page structure (struct VPGE)
  229.         ---if "setvpage"---
  230.          WORD    owner's process ID
  231.          DWORD    pointer to new page structure (struct VPGE)
  232.         ---if "info"---
  233.          no additional arguments
  234.         ---if "move"
  235.          DWORD    32-bit source address
  236.          DWORD    32-bit destination address
  237.          WORD    number of words to move
  238.         ---if "newmcb"---
  239.          DWORD    pointer to new MCB's location
  240.          WORD    size of memory block
  241.          DWORD    pointer to ASCIZ name string (max 8 chars)
  242.         ---if "owner"---
  243.          WORD    MCB or PSP segment
  244.         ---if "umb"---
  245.          WORD    size in paragraphs
  246.         ---if "video"---
  247.          no additional arguments
  248. Return: DX:AX -> memory block or VPGE struct or 0000h:0000h
  249. SeeAlso: AH=00h"VMiX",AH=01h"VMiX"
  250. --------T-1502-------------------------------
  251. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE
  252.     AH = 02h
  253.     AL = semaphore number (00h-3Fh)
  254. Return: AH = status
  255.         00h successful
  256.         01h not semaphore owner
  257.         02h invalid semaphore number
  258. Notes:    if any tasks are waiting for the semaphore, the first task on the wait
  259.       queue will become the new owner and be reawakened
  260.     do not use within an interrupt handler
  261. SeeAlso: AH=01h"MultiDOS",AH=10h"MultiDOS",AH=1Ch"MultiDOS"
  262. --------B-1503-------------------------------
  263. INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
  264.     AH = 03h
  265.     CX = number of bytes to write
  266.     ES:BX -> data buffer
  267. Return: CF clear if successful
  268.         ES:BX -> byte following last byte written
  269.     CF set on error
  270.     AH = status (see AH=02h"CASSETTE")
  271.     CX = 0000h
  272. SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"
  273. --------V-1503-------------------------------
  274. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE WRITE REGISTER
  275.     AH = 03h
  276.     AL = value (I,R,G,B bits)
  277. SeeAlso: AH=04h"Amstrad"
  278. --------O-1503-------------------------------
  279. INT 15 - VMiX - "sys_pinput" - PROMPTED CONSOLE INPUT
  280.     AH = 03h
  281.     STACK:    DWORD    pointer to ASCII prompt
  282.         WORD    field outline character
  283.         WORD    length of input field (max 7Fh)
  284.         DWORD    address of pointer to input buffer
  285. Return: AX = length of input (input buffer is padded with blanks)
  286. SeeAlso: AH=04h"VMiX"
  287. --------T-1503-------------------------------
  288. INT 15 - MultiDOS Plus - SUSPEND TASK FOR INTERVAL
  289.     AH = 03h
  290.     DX = number of time slices to remain suspended
  291. Return: after specified interval has elapsed
  292. Note:    when priority-based scheduling is in use, high-priority tasks should
  293.       use this function to yield the processor
  294. SeeAlso: AH=00h"MultiDOS",AH=0Ah"MultiDOS"
  295. --------B-1504-------------------------------
  296. INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
  297.     AH = 04h
  298.     ES:DI -> results buffer length 20h for System Parameter Table
  299.     DS = segment containing ABIOS RAM extensions (zero if none)
  300. Return: AH = 00h success: results at ES:DI
  301.     CF set on failure
  302. SeeAlso: AH=05h"ABIOS",C1h
  303.  
  304. Format of ABIOS System Parameter Table:
  305. Offset    Size    Description
  306.  00h    DWORD    FAR address of ABIOS Common Start Routine
  307.  04h    DWORD    FAR address of ABIOS Interrupt Routine
  308.  08h    DWORD    FAR address of ABIOS Time-out Routine
  309.  0Ch    WORD    number of bytes of stack required by this ABIOS implementation
  310.  0Eh 16 BYTEs    reserved
  311.  1Eh    WORD    number of entries in initialization table
  312. --------V-1504-------------------------------
  313. INT 15 - Amstrad PC1512 - WRITE VDU COLOR PLANE READ REGISTER
  314.     AH = 04h
  315.     AL = value (RDSEL1 and RDSEL0)
  316. SeeAlso: AH=03h"Amstrad",05h"Amstrad"
  317. --------O-1504-------------------------------
  318. INT 15 - VMiX - "sys_vprintf" - FORMATTED OUTPUT TO STREAM
  319.     AH = 04h
  320.     STACK:    DWORD    control string
  321.         DWORD    array of arguments
  322. SeeAlso: AH=03h"VMiX"
  323. --------T-1504-------------------------------
  324. INT 15 - MultiDOS Plus - SEND MESSAGE TO ANOTHER TASK
  325.     AH = 04h
  326.     AL = mailbox number (00h-3Fh)
  327.     CX = message length in bytes
  328.     DS:SI -> message
  329. Return: AH = status
  330.         00h successful
  331.         01h out of message memory
  332.         02h invalid mailbox number
  333. Note:    the message is copied into a system buffer; the caller may immediately
  334.       reuse its buffer
  335. SeeAlso: AH=05h"MultiDOS"
  336. --------B-1505-------------------------------
  337. INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
  338.     AH = 05h
  339.     ES:DI -> results buffer length (18h * Number_of_Entries)
  340.     DS = segment containing ABIOS RAM extensions (zero if none)
  341. Return: AH = 00h success: results at ES:DI
  342.     CF set on failure
  343. SeeAlso: AH=04h"ABIOS",C1h
  344.  
  345. Format of one entry of ABIOS Initialization Table:
  346. Offset    Size    Description
  347.  00h    WORD    device ID
  348.  02h    WORD    number of Logical IDs
  349.  04h    WORD    Device Block length (zero for ABIOS patch or extension)
  350.  06h    DWORD    -> init routine for Device Block and Function Transfer Table
  351.  0Ah    WORD    request block length
  352.  0Ch    WORD    Function Transfer Table length (zero for a patch)
  353.  0Eh    WORD    Data Pointers length (in Common Data Area)
  354.  10h    BYTE    secondary device ID (hardware level this ABIOS ver supports)
  355.  11h    BYTE    revision (device driver revision level this ABIOS supports)
  356.  12h  6 BYTEs    reserved
  357. --------V-1505-------------------------------
  358. INT 15 - Amstrad PC1512 - WRITE VDU GRAPHICS BORDER REGISTER
  359.     AH = 05h
  360.     AL = value (I,R,G,B bits)
  361. SeeAlso: AH=04h"Amstrad"
  362. --------O-1505-------------------------------
  363. INT 15 - VMiX - "sys_getpid" - GET PROCESS ID OF CURRENT PROCESS
  364.     AH = 05h
  365. Return: AX = process ID
  366. SeeAlso: AH=06h"VMiX",AH=0Bh"VMiX"
  367. --------T-1505-------------------------------
  368. INT 15 - MultiDOS Plus - CHECK MAILBOX
  369.     AH = 05h
  370.     AL = mailbox number (00h-3Fh)
  371. Return: AH = status
  372.         00h successful
  373.         DX = length of first message in queue, 0000h if no message
  374.         02h invalid mailbox number
  375. SeeAlso: AH=04h"MultiDOS",AH=06h"MultiDOS"
  376. --------b-1506-------------------------------
  377. INT 15 - Amstrad PC1512 - GET ROS VERSION NUMBER
  378.     AH = 06h
  379. Return: BX = version number
  380. --------O-1506-------------------------------
  381. INT 15 - VMiX - "sys_getpcb" - GET POINTER TO PROCESS CONTROL BLOCK
  382.     AH = 06h
  383.     STACK:    WORD    process ID
  384. Return: DX:AX -> process control block
  385. SeeAlso: AH=05h"VMiX",AH=07h"VMiX",AH=08h"VMiX"
  386. --------T-1506-------------------------------
  387. INT 15 - MultiDOS Plus - READ MAILBOX
  388.     AH = 06h
  389.     AL = mailbox number (00h-3Fh)
  390.     CX = size of buffer in bytes
  391.     ES:DI -> buffer for message
  392. Return: AH = status
  393.         00h successful
  394.         CX = number of bytes copied
  395.         DX = actual length of message
  396.         02h invalid mailbox number
  397. Note:    if the caller's buffer is not large enough, the message is truncated
  398.       and the remainder is lost
  399. SeeAlso: AH=04h"MultiDOS",AH=05h"MultiDOS"
  400. --------O-1507-------------------------------
  401. INT 15 - VMiX - "sys_getocb" - GET POINTER TO OBJECT CONTROL BLOCK
  402.     AH = 07h
  403.     STACK:    WORD    object type
  404. Return: DX:AX -> object control block
  405. SeeAlso: AH=06h"VMiX",AH=08h"VMiX"
  406. --------T-1507-------------------------------
  407. INT 15 - MultiDOS Plus - SPAWN INTERNAL TASK (CREATE NEW THREAD)
  408.     AH = 07h
  409.     BX:CX = entry point of new task
  410.     DX = stack size in paragraphs
  411. Return: AH = status
  412.         00h successful
  413.         01h no free task control blocks
  414.         02h no free memory for task's stack
  415. Note:    execution returns immediately to calling task
  416. SeeAlso: AH=08h"MultiDOS",AH=09h"MultiDOS",AH=13h"MultiDOS"
  417. --------O-1508-------------------------------
  418. INT 15 - VMiX - "sys_getccb" - GET CHANNEL CONTROL BLOCK
  419.     AH = 08h
  420.     STACK:    WORD    channel ID
  421. Return: DX:AX -> channel control block
  422. SeeAlso: AH=06h"VMiX",AH=07h"VMiX"
  423. --------T-1508-------------------------------
  424. INT 15 - MultiDOS Plus - TERMINATE INTERNAL TASK (KILL THREAD)
  425.     AH = 08h
  426. Return: calling task terminated, so execution never returns to caller
  427. Notes:    an internal task must be terminated with this function rather than a
  428.       DOS termination function
  429.     task's stack space is returned to parent task's memory pool
  430. SeeAlso: AH=07h"MultiDOS"
  431. --------O-1509-------------------------------
  432. INT 15 - VMiX - "sys_getqueue" - GET ID OF QUEUED ELEMENT
  433.     AH = 09h
  434.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  435.         WORD    subqueue ID
  436. Return: AX = queue ID
  437. SeeAlso: AH=0Ah"VMiX"
  438. --------T-1509-------------------------------
  439. INT 15 - MultiDOS Plus - CHANGE TASK'S PRIORITY
  440.     AH = 09h
  441.     AL = new priority
  442. Note:    the priority has different meanings depending on whether priority-
  443.       based or round-robin scheduling is used
  444. SeeAlso: AH=07h"MultiDOS"
  445. --------O-150A-------------------------------
  446. INT 15 - VMiX - "sys_qetqnext" - GET ID OF NEXT QUEUED ELEMENT
  447.     AH = 0Ah
  448.     STACK:    WORD    queue ID (0 = process queue, 1 = object, 3 = type)
  449.         WORD    ID of current element in queue chain
  450. Return: AX = ID of next element
  451. SeeAlso: AH=09h"VMiX",AH=0Fh"VMiX"
  452. --------T-150A-------------------------------
  453. INT 15 - MultiDOS Plus - CHANGE TIME SLICE INTERVAL
  454.     AH = 0Ah
  455.     AL = new interval
  456.         00h = 55.0 ms (default)
  457.         80h = 27.5 ms
  458.         40h = 13.75 ms
  459.         20h = 6.88 ms
  460.         10h = 3.44 ms
  461.         08h = 1.72 ms
  462. SeeAlso: AH=03h"MultiDOS"
  463. --------O-150B-------------------------------
  464. INT 15 - VMiX - "sys_sysreq" - SYSTEM CONFIGURATION MANAGER
  465.     AH = 0Bh
  466.     STACK:    WORD    caller's UID
  467.         DWORD    pointer to ASCIZ name of requested method
  468.             "abort" abort current send/receive on comm port
  469.             "block" start/end critical section
  470.             "close" terminate interrupt-drive comm I/O
  471.             "open" prepare comm port for interrupt-driven I/O
  472.             "delay" set delay timer and wait
  473.             "hibernate" put process to sleep
  474.             "ints" enable/disable interrupt-driven INT 14h
  475.             "length" get current send/receive buffer offsets
  476.             "kswitch" switch stacks
  477.             "numproc" get number of active processes
  478.             "protocol" set protocol function for comm interrupts
  479.             "relocate" set/reset VMiX flag for relocating to himem
  480.             "status" get current open comm port status
  481.             "wake" awaken a process
  482.             "xport" get comm port polled for logins
  483.         ---if "abort"---
  484.          no additional arguments
  485.         ---if "block"---
  486.          WORD    0000h end, 0001h start
  487.         ---if "close"---
  488.          no additional arguments
  489.         ---if "open"---
  490.          WORD    comm port (00h-03h)
  491.          WORD    BIOS parameter byte (see INT 14/AH=00h), except
  492.             bits 7-5 = 000 for 19200, 001 for 38400, 011 for 115200
  493.         ---if "delay"---
  494.          WORD    time in seconds
  495.         ---if "hibernate"---
  496.          WORD    process ID
  497.         ---if "ints"---
  498.          WORD    0000h if no, 0001h if yes
  499.         ---if "length","numproc","relocate","status","xport"---
  500.          no additional arguments
  501.         ---if "kswitch"---
  502.          DWORD    pointer to new stack
  503.         ---if "protocol"---
  504.          DWORD    pointer to function (must be in low "assign"ed memory
  505.             when in 386 mode)
  506.         ---if "wake"---
  507.          WORD    process ID
  508. Return: DX:AX -> result or 0000h:0000h
  509.         ---if "length"---
  510.          BYTE    receive offset
  511.          BYTE    send offset
  512.         ---if "kswitch"---
  513.          DWORD    old stack pointer
  514.         ---if "numproc"---
  515.          WORD    number of active processes
  516.         ---if "status"---
  517.          current open comm port status
  518.         ---if "xport"---
  519.          current comm port being polled for logins
  520. SeeAlso: AH=05h"VMiX",AH=0Eh"VMiX"
  521. --------T-150B-------------------------------
  522. INT 15 - MultiDOS Plus - FORCE DISPLAY OUTPUT TO PHYSICAL SCREEN MEMORY
  523.     AH = 0Bh
  524. Notes:    sets calling task's screen pointer to actual screen memory; the pointer
  525.       may be restored with AH=0Ch
  526.     caller's video mode must be same as foreground task's video mode
  527.     any text written while in the background will be saved to the
  528.       foreground task's virtual screen when it switches to the background
  529.     useful if a background task wants to display a message on the
  530.       foreground screen
  531. SeeAlso: AH=0Ch"MultiDOS"
  532. --------O-150C-------------------------------
  533. INT 15 - VMiX - "sys_getstack" - GET POINTER TO PROCESS TSS STACK
  534.     AH = 0Ch
  535.     STACK:    WORD    process ID
  536. Return: DX:AX -> TSS stack store
  537. SeeAlso: AH=00"VMiX"
  538. --------T-150C-------------------------------
  539. INT 15 - MultiDOS Plus - RESTORE OLD VIDEO DISPLAY MEMORY
  540.     AH = 0Ch
  541. Note:    restores task's screen pointer saved by AH=0Bh; must not be called
  542.       unless AH=0Bh has been called first
  543. SeeAlso: AH=0Bh"MultiDOS"
  544. --------O-150D-------------------------------
  545. INT 15 - VMiX - "sys_spawn" - START A CHILD PROCESS JOB SHELL
  546.     AH = 0Dh
  547.     STACK:    DWORD    ASCIZ string starting with requested I/O channel and
  548.             followed by standard VMiX shell command string
  549. Return: AX = process ID or error code "SYS_ERROR"
  550. Note:    the maximum string length is 7Fh characters
  551. SeeAlso: AH=0Eh"VMIX",AH=11h"VMiX",INT 21/AH=4Bh
  552. --------T-150D-------------------------------
  553. INT 15 - MultiDOS Plus - DISABLE MULTITASKING
  554.     AH = 0Dh
  555. Note:    calling task receives all time slices until AH=0Eh is called; this
  556.       allows time-critical events or nonreentrant code to be processed
  557. SeeAlso: AH=0Eh"MultiDOS",AH=10h"MultiDOS",AX=101Bh,AH=20h"MultiDOS"
  558. --------O-150E-------------------------------
  559. INT 15 - VMiX - "sys_kill" - HARD TERMINATE PROCESS
  560.     AH = 0Eh
  561.     STACK:    WORD    process ID
  562. Return: AX = status (SYS_OK or SYS_ERROR)
  563. SeeAlso: AH=0Bh"VMiX",AH=0Dh"VMIX"
  564. --------T-150E-------------------------------
  565. INT 15 - MultiDOS Plus - ENABLE MULTITASKING
  566.     AH = 0Eh
  567. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AH=20h"MultiDOS"
  568. --------d-150F-------------------------------
  569. INT 15 C - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
  570.     AH = 0Fh
  571.     AL = phase code
  572.         00h reserved
  573.         01h surface analysis
  574.         02h formatting
  575. Return: CF clear if formatting should continue, set if it should terminate
  576. Note:    called during ESDI drive formatting after each cylinder is completed
  577. SeeAlso: INT 13/AH=1Ah
  578. --------O-150F-------------------------------
  579. INT 15 - VMiX - "sys_getqkey" - GET KEY FIELD OF QUEUED ELEMENT
  580.     AH = 0Fh
  581.     STACK:    WORD    queue ID (0 = process queue, 1 = object q, 3 = type q)
  582.         WORD    ID of element in queue chain
  583. Return: AX = key
  584. SeeAlso: AH=0Ah"VMiX"
  585. --------T-150F-------------------------------
  586. INT 15 - MultiDOS Plus - EXECUTE A MULTIDOS PLUS COMMAND
  587.     AH = 0Fh
  588.     DS:BX -> ASCIZ command
  589. Return: after command has been processed
  590. Notes:    specified string is executed as if it had been typed at the MultiDOS
  591.       command prompt
  592.     the task is placed on a queue which MultiDOS examines periodically and
  593.       is suspended until MultiDOS has processed the command
  594.     all lowercase characters up to the first blank are converted to upper
  595.       case within the given buffer
  596. --------O-1510-------------------------------
  597. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  598.     AH = 10h
  599.     STACK:    DWORD    pointer to function
  600.           N WORDs    function args
  601. Return: AX = function's return value??? (not specified in documentation)
  602. Note:    while the function is executing, the following global descriptors are
  603.       available:
  604.         20h stack segment
  605.         38h code segment of function
  606.         40h data alias for function's code segment
  607.       additional GDT descriptors can be allocated using AH=02h with
  608.       function "assign gdt"
  609. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  610. --------T-1510-------------------------------
  611. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  612.     AH = 10h
  613.     AL = semaphore number (00h-3Fh)
  614. Return: AH = status
  615.         00h semaphore not in use
  616.         01h semaphore owned by another task
  617.         02h invalid semaphore number
  618.         03h semaphore owned by caller
  619. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  620. --------Q-151000-----------------------------
  621. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  622.     AX = 1000h
  623. Return: after other processes run
  624. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  625.       the current time-slice is set to expire at the next clock tick rather
  626.       than immediately
  627. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  628. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 7A/BX=000Ah
  629. SeeAlso: INT 7F/AH=E8h
  630. --------Q-151001-----------------------------
  631. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  632.     AX = 1001h
  633.     BX = number of bytes to allocate
  634. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  635.     AX = status (DV v2.42)
  636.         0000h successful
  637.         0001h failed
  638. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  639.       common memory.  Under DV v2.42, this call never generates a user
  640.       prompt regardless of the SETERROR value; instead, it always returns
  641.       AX=0001h and ES:DI=0000h:0000h if out of memory
  642. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  643. --------Q-151002-----------------------------
  644. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  645.     AX = 1002h
  646.     ES:DI -> previously allocated block
  647. Return: block freed
  648. SeeAlso: AX=1001h,AX=DE0Dh
  649. --------Q-151003-----------------------------
  650. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  651.     AX = 1003h
  652.     BH = attribute
  653.     BL = character
  654.     DX = segment of object handle for window
  655. Note:    BX=0 does not display anything, it only positions the hardware cursor
  656. --------Q-1510-------------------------------
  657. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  658.     AH = 10h
  659.     AL = 04h thru 12h
  660. Return: pops up "Programming error" window in DV 2.x
  661. --------Q-151013-----------------------------
  662. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  663.     AX = 1013h
  664.     ES:DI -> FAR service routine
  665. Return: BX = bit mask indicating which bit was allocated
  666.          0000h if no more bits available
  667. SeeAlso: AX=1014h,AX=1015h
  668. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  669.       interrupt; if other calls need to be made, the interrupt handler
  670.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  671. --------Q-151014-----------------------------
  672. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  673.     AX = 1014h
  674.     BX = bit mask from INT 15/AX=1013h
  675. SeeAlso: AX=1013h,AX=1015h
  676. --------Q-151015-----------------------------
  677. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  678.     AX = 1015h
  679.     BX = bit mask for interrupts to post
  680. Return: indicated routines will be called: (DV 2.0x) at next task switch
  681.                        (DV 2.2x) immediately on return from
  682.                              hardware interrupt
  683. SeeAlso: AX=1013h,AX=1014h
  684. Notes:    this is one of the few TopView calls which are allowed from a hardware
  685.       interrupt handler
  686.     the handler will be called with ES containing the segment of the handle
  687.       of the next task to be executed; on return, ES must be the segment of
  688.       a task handle
  689. --------Q-151016-----------------------------
  690. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  691.     AX = 1016h
  692.     ES:DI = possible object handle
  693. Return: BX = FFFFh if ES:DI is a valid object handle
  694.          0000h if ES:DI is not
  695. Note:    under DESQview versions prior to 2.50, an object handle is always a
  696.       pointer to the object; for versions 2.50 and up, only task handles
  697.       are always pointers (other handles may consist of a unique object
  698.       number and offset into DESQview's common memory)
  699. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  700.  
  701. Format of object:
  702. Offset    Size    Description
  703.  00h    WORD    offset in common memory of previous object of same type
  704.  02h    WORD    offset in common memory of next object of same type
  705.  04h    WORD    signature FEDCh (DV 2.42-)
  706.         signature FEDCh or object number (DV 2.50+)
  707.  06h    WORD    object type
  708.         00h window/task
  709.         01h mailbox
  710.         02h keyboard
  711.         03h timer
  712.         04h pointer
  713.         05h panel
  714.         06h objectq
  715.  08h    DWORD    object handle to return to caller
  716.  0Ch    DWORD    canonicalized object address (segment = common memory)
  717.  10h    WORD    offset in common memory of owning task
  718.  12h    WORD    mapping context
  719.         offset in common memory of mapping context record (see below)
  720.     remainder varies by object type and DESQview version
  721. ---v2.42 keyboard object---
  722.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  723.         bit 15: keyboard opened
  724.  16h  4 BYTEs    ???
  725.  1Ah    WORD    priority in OBJECTQ???
  726.  1Ch    ...
  727.  25h    WORD    offset in common memory of ??? task
  728.  27h  4 BYTEs    ???
  729. ---v2.42 objectq object---
  730.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  731.         bit 15: OBJECTQ opened
  732.  16h  2 BYTEs    ???
  733.  18h    WORD    offset in common memory of ??? task
  734.  1Ah  6 BYTEs    ???
  735. ---v2.42 mailbox object---
  736.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  737.         bit 15: mailbox opened
  738.  1Ah    WORD    priority in OBJECTQ???
  739.  1Ch  6 BYTEs    ???
  740.  22h    WORD    offset in common memory of mailbox name (counted string)
  741.         0000h if no name
  742.      <= 5 BYTEs ???
  743. ---v2.22-2.42 window/task object---
  744.  14h    BYTE    00h window, 01h task
  745.  15h    BYTE    internal (not Switch menu) window number???
  746.  16h    BYTE    internal (not Switch menu) window number???
  747.  17h    WORD    segment of internal window record
  748.  19h  2 BYTEs    ???
  749.  1Bh    BYTE    cursor row
  750.  1Ch    BYTE    cursor column
  751.  1Dh  2 BYTEs    ???
  752.  1Fh    BYTE    window height (logical)
  753.  20h    BYTE    window width (logical)
  754.  21h    BYTE    window position, row
  755.  22h    BYTE    window position, column
  756.  23h    BYTE    window height (visible)
  757.  24h    BYTE    window width (visible)
  758.  25h    BYTE    row of top of frame (or window if unframed)
  759.  26h    BYTE    column of left of frame (or window if unframed)
  760.  27h    BYTE    window height (physical, including frame)
  761.  28h    BYTE    window width (physical, including frame)
  762.  29h  6 BYTEs    ???
  763.  2Fh    BYTE    ??? initially logical window height
  764.  30h    BYTE    ??? initially logical window width
  765.  31h  2 BYTEs    ???
  766.  33h    BYTE    minimum height of window
  767.  34h    BYTE    minimum width of window
  768.  35h    BYTE    maximum height of window
  769.  36h    BYTE    maximum width of window
  770.  37h  3 BYTEs    ???
  771.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  772.  42h 24 BYTEs    attributes???
  773.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  774.  62h  3 BYTEs    ???
  775.  65h    BYTE    ??? bitflags
  776.  66h  2 BYTEs    ???
  777.  68h    WORD    offset in common memory of window name or 0000h if untitled
  778.  6Ah    WORD    length of window name
  779.  6Ch  2 BYTEs    ???
  780.  6Eh    WORD    offset of logical cursor in window (in character cells)
  781.  70h    DWORD    pointer to field table for window
  782.  74h    BYTE    ???
  783.  75h  2 BYTEs    ???
  784.  77h    BYTE    number of last-visited field
  785.  78h    DWORD    pointer to field table entry for last-visited field
  786.  7Ch  3 BYTEs    ???
  787.  7Fh    BYTE    select field marker character
  788.  80h    BYTE    ??? bit flags
  789.         bit 0: allow ECh window stream opcode to change reverse logattr
  790.         bit 1: alternate field processing mode selected
  791.  81h    BYTE    ???
  792.  82h    DWORD    notification function (manager stream opcode 8Ah)
  793.         no notification if segment = 0000h
  794.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  795.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  796.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  797.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  798.  90h    BYTE    ??? bitflags
  799.  91h    BYTE    ???
  800.  ---task object only
  801.  92h    BYTE    bit flags (bits 0-4)
  802.  93h    BYTE    character for ??? (default 20h)
  803.  94h    BYTE    ??? flag
  804.  95h    WORD    offset in common memory of ???
  805.  97h  2 BYTEs    ???
  806.  99h    WORD    ???
  807.  9Bh    BYTE    ??? bit flags
  808.         bit 3: ???
  809.         bit 6: perform protected-attribute processing on select fields
  810.  9Ch    BYTE    ???
  811.  9Dh    WORD    offset in common memory of current register save record
  812.         (see below).  No register save record in use if < 01C0h
  813.  9Fh    WORD    offset in common memory of task's keyboard object
  814.  A1h    WORD    offset in common memory of task's OBJECTQ object
  815.  A3h    WORD    offset in common memory of task's mailbox object
  816.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  817.  A7h    DWORD    user's SS:SP
  818.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  819.  ADh  6 BYTEs    ???
  820.  B3h    BYTE    ??? bit flags
  821.         bit 0: run in foreground only
  822.  B4h    BYTE    ???
  823.  B5h    BYTE    ??? bitflags
  824.  B6h    BYTE    task status (see AX=DE2Ch)
  825.  B7h  9 BYTEs    ???
  826.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  827.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  828.  C4h  2 BYTEs    ??? (0000h)
  829.  C6h    WORD    segment of keyboard buffer for task
  830.  C8h    WORD    offset in common memory of ??? keyboard object
  831.  CAh    BYTE    ???
  832.  CBh    WORD    offset in common memory of ??? object
  833.  CEh    BYTE    ??? flag
  834.  CFh    WORD    offset in common memory of default notify window for task
  835.         or 0000h if none
  836.  D1h  4 BYTEs    ???
  837.  D5h    BYTE    window number on Switch Window menu
  838.  D6h  5 BYTEs    ???
  839.  DBh    WORD    offset in common memory of ??? object
  840.  DDh  2 BYTEs    ???
  841.  DFh    WORD    API level for task
  842.  E1h    WORD    offset in common memory of ??? keyboard object
  843.  E7h    WORD    segment of ???
  844.  E9h 18 BYTEs    ???
  845.  FBh    WORD    ???
  846.  FDh    BYTE    ???
  847.  FFh 26 BYTEs    ???
  848. 119h    DWORD    SS:SP for ???
  849. 11Dh  4 BYTEs    ???
  850. 121h    DWORD    pointer to ???
  851. 125h 35 BYTEs    ???
  852. ---v2.22
  853. 145h        task's default keyboard object
  854. ---v2.42
  855. 148h    WORD    ???
  856. 14Ah    BYTE    ???
  857. 14Dh 42 BYTEs    task's default keyboard object
  858. 177h 32 BYTEs    task's ObjectQ object
  859. 197h 41 BYTEs    task's default mailbox object
  860. 1C0h 24 BYTEs    first register save record
  861. 450h    --    default top of private stack
  862.  
  863. Format of Register Save Record:
  864. Offset    Size    Description
  865.  00h    WORD    AX
  866.  02h    WORD    BX
  867.  04h    WORD    CX
  868.  06h    WORD    DX
  869.  08h    WORD    DI
  870.  0Ah    WORD    SI
  871.  0Eh    WORD    DS
  872.  10h    WORD    ES
  873.  12h    DWORD    return address
  874.  16h    WORD    original flags
  875.  
  876. Format of mapping context record:
  877. Offset    Size    Description
  878.  00h    WORD    segment of start of system memory chain
  879.  02h    WORD    size of process's memory in paragraphs
  880.  04h 15 BYTEs    ???
  881.  13h    BYTE    reference count
  882. --------Q-151017-----------------------------
  883. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  884.     AX = 1017h
  885. Return: pops up "Programming error" window in DV 2.x
  886. --------Q-151018-----------------------------
  887. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  888.     AX = 1018h
  889.     BH = column
  890.     BL = row
  891.     ES = segment of object handle for window below which to search
  892.          0000h = start search with topmost window
  893. Return: ES = segment of object handle for window which is visible at the
  894.            indicated position, or covered by indicated window
  895.        = 0000h no window
  896. SeeAlso: AX=1023h,AX=1024h
  897. --------Q-151019-----------------------------
  898. INT 15 - TopView - "SOUND" - MAKE TONE
  899.     AX = 1019h
  900.     BX = frequency in Hertz (0000h = silence)
  901.     CX = duration in clock ticks (18.2 ticks/sec)
  902. Return: immediately, tone continues to completion
  903. Notes:    if another tone is already playing, the new tone does not start until
  904.       completion of the previous one.  Up to 32 tones may be queued before
  905.       the process is blocked until a note completes.
  906.     in DV 2.00, the lowest tone allowed is 20 Hz
  907.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  908.       notes are also cancelled
  909. SeeAlso: INT 16/AH=73h
  910. --------Q-15101A-----------------------------
  911. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  912.     AX = 101Ah
  913. Return: stack switched
  914. Notes:    this call may not be nested; a second call must be preceded by a call
  915.       to "USTACK" (AX=1025h)
  916.     while TopView requires many API calls to be executed while on the
  917.       task's internal stack, DESQview allows those calls to be executed
  918.       regardless of the current stack
  919. SeeAlso: AX=1025h
  920. --------Q-15101B-----------------------------
  921. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  922.     AX = 101Bh
  923. Return: task-switching temporarily disabled
  924. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  925.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  926.       will again be disabled)
  927.     suspends the caller until DOS is free
  928. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  929. SeeAlso: INT 60/DI=0602h
  930. --------Q-15101C-----------------------------
  931. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  932.     AX = 101Ch
  933. Return: task-switching enabled
  934. Note:    this API call may be made from within a hardware interrupt handler
  935. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  936. --------Q-15101D-----------------------------
  937. INT 15 - TopView - "STOP" - STOP TASK
  938.     AX = 101Dh
  939.     ES = segment of object handle for task to be stopped
  940.          (== handle of main window for that task)
  941. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  942. Note:    once a task has been stopped, additional "STOP"s are ignored
  943. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  944.       current task
  945. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  946. --------Q-15101E-----------------------------
  947. INT 15 - TopView - "START" - START TASK
  948.     AX = 101Eh
  949.     ES = segment of object handle for task to be started
  950.          (== handle of main window for that task)
  951. Return: indicated task is started up again
  952. Note:    once a task has been started, additional "START"s are ignored
  953. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  954. --------Q-15101F-----------------------------
  955. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  956.     AX = 101Fh
  957.     BX = bit fields
  958.          bits 0-12: number of characters to display
  959.          bits 13,14: which mouse button may be pressed to remove window
  960.              00 = either
  961.              01 = left
  962.              10 = right
  963.              11 = either
  964.          bit 15: beep if 1
  965.     ES:DI -> text of message
  966.     CH = width of error window (0 = default)
  967.     CL = height of error window (0 = default)
  968.     DX = segment of object handle
  969. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  970. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  971. --------Q-151020-----------------------------
  972. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  973.     AX = 1020h
  974. Return: pops up "Programming error" window in DV v2.00+
  975. --------Q-151021-----------------------------
  976. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  977.     AX = 1021h
  978.     BX = segment of object handle for task to interrupt (not self)
  979.     DX:CX -> FAR routine to jump to next time task is run
  980. Return: nothing
  981. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  982.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  983.       needs to be preserved
  984.     multiple PGMINTs to a single task are processed last-in first-out
  985.     if the other task is in a DOS or DV API call, the interruption will
  986.       occur on return from that call
  987. --------Q-151022BX0000-----------------------
  988. INT 15 - TopView - "GETVER" - GET VERSION
  989.     AX = 1022h
  990.     BX = 0000h
  991. Return: BX nonzero, TopView or compatible loaded
  992.     (BL = major version, BH = minor version)
  993. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  994. --------Q-151023-----------------------------
  995. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  996.     AX = 1023h
  997.     BX = segment of object handle for parent window within which to
  998.          position the window (0 = full screen)
  999.     ES = segment of object handle for window to be positioned
  1000.     DL = bit flags
  1001.          bits 0,1: horizontal position
  1002.         00 = current
  1003.         01 = center
  1004.         10 = left
  1005.         11 = right
  1006.          bits 2,3: vertical position
  1007.         00 = current
  1008.         01 = center
  1009.         10 = top
  1010.         11 = bottom
  1011.          bit 4: don't redraw screen if set
  1012.          bits 5-7 not used
  1013.     CH = number of columns to offset from position specified by DL
  1014.     CL = number of rows to offset from position specified by DL
  1015. Return: nothing
  1016. --------Q-151024-----------------------------
  1017. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  1018.     AX = 1024h
  1019.     BX = segment of object handle for window
  1020.           (0 = use default)
  1021. Return: ES:DI -> virtual screen
  1022.     CX = size of virtual screen in bytes
  1023.     DL = 00h text screen
  1024.          01h graphics screen
  1025. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  1026. --------Q-151025-----------------------------
  1027. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  1028.     AX = 1025h
  1029. Return: stack switched back
  1030. Notes:    call only after having switched to internal stack with AX=101Ah
  1031.     while TopView requires many API calls to be executed while on the
  1032.       task's private stack, DESQview allows those calls to be executed
  1033.       regardless of the current stack
  1034. SeeAlso: AX=101Ah
  1035. --------Q-1510-------------------------------
  1036. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  1037.     AH = 10h
  1038.     AL = 26h thru 2Ah
  1039. Return: pops up "Programming error" window in DV 2.x
  1040. --------Q-15102B-----------------------------
  1041. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  1042.     AX = 102Bh
  1043.     BX = segment of object handle for task
  1044. Return: nothing
  1045. Note:    forces a task which is waiting on its objectq to continue by placing
  1046.       the handle for the task on the objectq
  1047. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  1048. --------Q-15102C-----------------------------
  1049. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  1050.     AX = 102Ch
  1051.     ES:DI -> contents of .PIF/.DVP file (see below)
  1052.     BX = size of .PIF/.DVP info
  1053. Return: BX = segment of object handle for new task
  1054.          0000h on error
  1055. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  1056.  
  1057. Format of .PIF/.DVP file:
  1058. Offset    Size    Description
  1059.  00h    BYTE    reserved (0)
  1060.  01h    BYTE    checksum of bytes 02h through 170h
  1061.  02h 30 BYTEs    blank-padded program title
  1062.  20h    WORD    maximum memory to allocate to partition in KB
  1063.  22h    WORD    minimum memory required in KB
  1064.  24h 64 BYTEs    ASCIZ program pathname
  1065.  64h    BYTE    default drive letter ('A',...)
  1066.  65h 64 BYTEs    ASCIZ default directory name
  1067.  A5h 64 BYTEs    ASCIZ program parameters
  1068.  E5h    BYTE    initial screen mode (0-7) (see also offset 189h)
  1069.  E6h    BYTE    number of text pages used
  1070.  E7h    BYTE    number of first interrupt to save
  1071.  E8h    BYTE    number of last interrupt to save
  1072.  E9h    BYTE    rows in virtual screen buffer
  1073.  EAh    BYTE    columns in virtual screen buffer
  1074.  EBh    BYTE    initial window position, row
  1075.  ECh    BYTE    initial window position, column
  1076.  EDh    WORD    system memory in KB
  1077.  EFh 64 BYTEs    ASCIZ shared program name
  1078. 12Fh 64 BYTEs    ASCIZ shared program data file
  1079. 16Fh    BYTE    flags1
  1080.         bit 7: writes text directly to screen
  1081.         bit 6: runs in foreground only (see also offset 184h)
  1082.         bit 5: uses math coprocessor
  1083.         bit 4: accesses system keyboard buffer directly
  1084.         bits 3-1: reserved (0)
  1085.         bit 0: swappable
  1086. 170h    BYTE    flags2
  1087.         bit 6: uses command-line parameters in field at A5h
  1088.         bit 5: swaps interrupt vectors
  1089. ---information unique to .DVP files---
  1090. 171h  2 BYTEs    keys to use on open menu
  1091. 173h    WORD    size of script buffer in bytes
  1092. 175h    WORD    automatically give up CPU after this many tests for keyboard
  1093.         input in one clock tick (default 0 = never)
  1094. 177h    BYTE    nonzero = "uses own colors"
  1095. 178h    BYTE    nonzero if application swappable
  1096. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  1097.         in actual .DVP files, frequently 01h
  1098. 17Ch    BYTE    nonzero to automatically close on exit (see also offset 18Bh)
  1099. 17Dh    BYTE    nonzero if copy-protect floppy is required
  1100. ---information unique to DESQview 2.0+---
  1101. 17Eh    BYTE    .DVP version number
  1102.         00h DESQview v1.2+
  1103.         01h DESQview v2.0+
  1104.         02h DESQview v2.2+
  1105. 17Fh    BYTE    reserved (0)
  1106. 180h    BYTE    initial number of rows in physical window
  1107. 181h    BYTE    initial number of columns in physical window
  1108. 182h    WORD    maximum expanded memory to allow, in KB
  1109. 184h    BYTE    flags3
  1110.         bit 7: automatically assign window position
  1111.         bit 5: maximum memory value has been specified
  1112.         bit 4: disallow "Close" command
  1113.         bit 3: foreground-only when doing graphics
  1114.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  1115.         bit 2: don't virtualize (see also offset 18Bh)
  1116.         bit 1: foreground-only during DOS calls
  1117.             set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  1118. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  1119.         bit 3: save/restore entire INT 09 handler state every taskswtch
  1120.         bit 2: take special precautions for programs which read the
  1121.             BIOS keyboard buffer directly from memory
  1122.         bit 1: never indicate keystroke available during scripts/xfers
  1123.         bit 0: only indicate keystroke available every sixth poll
  1124. 186h    BYTE    number of graphics pages used
  1125. 187h    WORD    extra system memory size
  1126. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  1127. ---information unique to DESQview 2.2+---
  1128. 18Ah    BYTE    serial port usage
  1129.         FFh uses all serial ports
  1130.         00h no serial ports
  1131.         01h only COM1
  1132.         02h only COM2
  1133. 18Bh    BYTE    flags4
  1134.         bit 7: automatically close application on exit if .COM or .EXE
  1135.             specified (see also offset 17Ch)
  1136.         bit 6: swappable if not using serial ports
  1137.         bit 5: start program with window hidden (v2.26+)
  1138.         bit 4: start program in background (v2.26+)
  1139.         bit 3: virtualize text (see also offset 184h)
  1140.         bit 2: virtualize graphics (see also offset 184h)
  1141.         bit 1: share CPU when foreground
  1142.         bit 0: share EGA when foreground and zoomed
  1143. 18Ch    BYTE    protection level for 386 machines
  1144. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  1145. ---information unique to DESQview/X 1.0---
  1146. 18Dh    BYTE    X flags
  1147.         bits 3-7: unused (0)
  1148.         bit 2: don't display wait message when opening window
  1149.         bit 1: don't display DOS window
  1150.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  1151.                (NEWPROC) inherit DOS client layer usage
  1152. 18Eh    BYTE    X keyboard behavior (0-3)
  1153. 18Fh    BYTE    font scaling
  1154.         00h fixed fonts
  1155.         01h scalable fonts
  1156. 190h 10 BYTEs    reserved (0)
  1157. 19Ah    WORD    length of data follownig XDVP signature
  1158. 19Ch  4 BYTEs    signature "XDVP"
  1159. 1A0h  N BYTEs    list of variable length records (see below)
  1160.  
  1161. Format of variable length record:
  1162. Offset    Size    Description
  1163.  00h    WORD    length of following record, 0000h if end of record list
  1164.  02h    BYTE    record type
  1165.         01h script filename, up to 64 characters
  1166.         02h command-line parameters (allows >64 characters on cmdline)
  1167.         03h environment inheritance
  1168.         04h environment string
  1169.         05h starting window position
  1170. ---types 01h,02h,04h---
  1171.  03h  N BYTEs    ASCII data
  1172. ---type 03h---
  1173.  03h    BYTE    inheritance
  1174.         00h do not inherit
  1175.         01h inherit environment
  1176. ---type 05h---
  1177.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  1178.         starting row, starting column, starting height, starting width
  1179. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  1180.       only the last instance of each type is used; multiple occurrences of
  1181.       type 04h are concatenated
  1182. --------Q-15102D-----------------------------
  1183. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  1184.     AX = 102Dh
  1185.     BL = subfunction
  1186.          00h determine whether using keyboard mouse
  1187.         Return: BL = 00h using real mouse
  1188.                  01h using keyboard mouse
  1189.          01h turn keyboard mouse on
  1190.          02h turn keyboard mouse off
  1191. --------Q-15102E-----------------------------
  1192. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  1193.     AX = 102Eh
  1194.     BX = number of bytes
  1195. Return: AX = status
  1196.         0000h successful
  1197.         ES:DI -> allocated system memory
  1198.         0001h failed
  1199.         ES:DI = 0000h:0000h
  1200. Note:    under DV 2.42, this call is identical to AX=1001h
  1201. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  1202.  
  1203. Format of system memory block header (one paragraph before memory block):
  1204. Offset    Size    Description
  1205.  00h    WORD    segment of next header or 0000h
  1206.  02h    WORD    segment of previous header or 0000h
  1207.  04h    WORD    size of block in paragraphs, including header
  1208.  06h    BYTE    availability flag (00h in use, 01h free)
  1209. --------Q-1511-------------------------------
  1210. INT 15 - TopView commands
  1211.     AH = 11h
  1212.     AL = various (except 17h)
  1213. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  1214.       see those below
  1215. SeeAlso: AH=DEh
  1216. --------T-1511-------------------------------
  1217. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  1218.     AH = 11h
  1219.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  1220.             request (max len = 127)
  1221. Return: AX = status (SYS_OK or SYS_ERROR)
  1222. SeeAlso: AH=0Ch"VMiX"
  1223. --------T-1511-------------------------------
  1224. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  1225.     AH = 11h
  1226. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  1227. SeeAlso: AH=12h"MultiDOS"
  1228. Index:    hotkeys;MultiDOS Plus
  1229. --------Q-151117BX0000-----------------------
  1230. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  1231.     AX = 1117h
  1232.     BX = 0000h    get current mapping context without setting
  1233.          nonzero    set new mapping context
  1234. Return: BX = mapping context in effect before call
  1235.     interrupts enabled
  1236. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  1237.     mapping contexts determine conventional-memory addressability; setting
  1238.       a mapping context ensures that the associated program and data areas
  1239.       are in memory for access.  Usable by drivers, TSRs and shared
  1240.       programs.
  1241.     caller need not be running under DESQview, but must ensure that the
  1242.       stack in use will not be mapped out by the call
  1243. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  1244. --------m-1511DE-----------------------------
  1245. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  1246.     AX = 11DEh
  1247. Return: CF clear if installed
  1248.         AX = segment at which QEXT.SYS is located
  1249. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  1250.       versions also implement the XMS standard
  1251. Note:    a private entry point may be found by searching the beginning of the
  1252.       returned segment for the signature string
  1253.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  1254.       prior to the signature contains the QEXT version number in BCD,
  1255.       and the word prior to that contains the offset within the QEXT
  1256.       code segment of the private entry point
  1257. SeeAlso: INT 2F/AX=4310h,INT 67/AH=3Fh
  1258.  
  1259. Call private entry point with:
  1260.     AH = 00h ???
  1261.     AH = nonzero ???
  1262. --------T-1512-------------------------------
  1263. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  1264.     AH = 12h
  1265.     STACK:    WORD    process ID
  1266. Return: AX = status (SYS_OK or SYS_ERROR)
  1267. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  1268. --------T-1512-------------------------------
  1269. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  1270.     AH = 12h
  1271. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  1272. SeeAlso: AH=11h"MultiDOS"
  1273. Index:    hotkeys;MultiDOS Plus
  1274. --------Q-1512--BH00-------------------------
  1275. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  1276.     AH = 12h
  1277.     BH = 00h
  1278.     BL = which handle to return
  1279.         00h handle in DWORD on top of stack
  1280.         01h current task's window handle
  1281.         02h given task's mailbox handle (task's handle on stack)
  1282.         03h current task's mailbox handle
  1283.         04h given task's keyboard handle (task's handle on stack)
  1284.         05h current task's keyboard object handle
  1285.         06h given task's OBJECTQ handle (task's handle on stack)
  1286.         07h current task's OBJECTQ handle
  1287.         08h      \
  1288.           thru > return 0000:0000 under DV < 2.26
  1289.         10h      /
  1290.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  1291.         0Dh (2.26+) task handle of owner (parent) of current task
  1292. Return: DWORD on top of stack is object handle
  1293. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  1294.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  1295.       window)
  1296. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  1297. --------Q-1512--BH01-------------------------
  1298. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  1299.     AH = 12h
  1300.     BH = 01h
  1301.     BL = object type to create
  1302.         00h (DV 2.0x only) handle is DWORD on top of stack
  1303.         01h (DV 2.0x only) use task's window handle
  1304.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  1305.         03h (DV 2.0x only) current task's mailbox
  1306.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  1307.         05h (DV 2.0x only) current task's keyboard object
  1308.         08h WINDOW class
  1309.         09h MAILBOX class
  1310.         0Ah KEYBOARD class
  1311.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  1312.         0Fh POINTER object
  1313.         10h PANEL object
  1314.     STACK: (if window object or WINDOW class)
  1315.            DWORD address to jump to (no new task if high word == 0)
  1316.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  1317.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  1318.            DWORD bytes system memory for input buffer for READ/READN
  1319.             (0 == none, -1 == default--same as logical window size)
  1320.            DWORD window size, columns
  1321.            DWORD window size, rows
  1322.            DWORD length of window title
  1323.            DWORD address of window title
  1324. Return: DWORD on top of stack is new object handle
  1325. Notes:    if a new task is created, it is started with
  1326.       AX = BX = SI = DI = BP = 0
  1327.       DX:CX = handle of parent task
  1328.       DS = ES = SS = segment of private stack (and new task's handle)
  1329.     new windows are orphans, inherit the colors/hidden status of the
  1330.       creating task's window, and are placed in the upper left hand corner
  1331.       of the screen but not automatically redrawn
  1332.     new keyboards are closed, and have all object bits cleared except for
  1333.       the hardware cursor bit
  1334. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  1335. --------Q-1512--BH02-------------------------
  1336. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  1337.     AH = 12h
  1338.     BH = 02h
  1339.     BL = object
  1340.         00h handle in DWORD on top of stack
  1341.         window: close window and free
  1342.         timer: free timer
  1343.         panel: free panel object
  1344.         pointer: free pointer
  1345.         01h task's window handle - kills task, never returns
  1346.         02h given task's mailbox (task's handle on top of stack)
  1347.         03h current task's mailbox
  1348.         04h given task's keyboard (task's handle on top of stack)
  1349.         05h current task's keyboard object
  1350. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  1351.       task windows also free any mailbox, objectq, and panel objects held
  1352.       by the task and any child tasks
  1353.     if the keyboard being freed is the default keyboard for a task, this
  1354.       call is equivalent to CLOSE
  1355.     panel and pointer objects are automatically closed if open
  1356. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  1357. --------Q-1512--BH03-------------------------
  1358. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  1359.     AH = 12h
  1360.     BH = 03h
  1361.     BL = object
  1362.         00h mailbox handle in DWORD on top of stack
  1363.         02h sender of last msg read from mailbox (task's handle on stack)
  1364.         03h sender of last msg read from current task's mailbox
  1365. Return: DWORD on stack is task handle of message sender
  1366. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  1367. --------Q-1512--BH03-------------------------
  1368. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  1369.     AH = 12h
  1370.     BH = 03h
  1371.     BL = window to be connected
  1372.         00h handle of window to be attached in DWORD on top of stack
  1373.         01h attach current task's main window
  1374.     STACK: DWORD handle of window to attach to or 00000000h to detach
  1375. Return: STACK popped
  1376. Notes:    when two windows are connected, both will move if the user moves either
  1377.     multiple windows may be attached to a single window, but each window
  1378.       may only be attached to one window at a time
  1379. SeeAlso: AH=12h/BH=83h
  1380. --------Q-1512--BX0300-----------------------
  1381. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  1382.     AH = 12h
  1383.     BX = 0300h
  1384.     STACK: DWORD handle of panel object
  1385. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  1386.            DWORD address of directory
  1387. Note:    a null string is returned if the object is not open
  1388. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  1389.  
  1390. Format of panel file:
  1391. Offset    Size    Description
  1392.  00h  2 BYTEs    C0h C3h
  1393.  02h    BYTE    number of panels in file
  1394.  03h    for each panel in file:
  1395.         8 BYTEs  blank-padded panel name
  1396.           DWORD  panel offset in file
  1397.           WORD   panel length
  1398.     data for panels (each consists of one or more window/query/manager
  1399.     streams)
  1400.         first byte of each panel must be 1Bh, fifth byte must be E5h
  1401. --------Q-1512--BH04-------------------------
  1402. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1403.     AH = 12h
  1404.     BH = 04h
  1405.     BL = window to read from
  1406.         00h handle is DWORD on top of stack
  1407.         01h use calling task's default window
  1408.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1409.         0Dh (DV 2.26+) default window of parent task of current task
  1410. Return: STACK:    DWORD number of bytes read
  1411.         DWORD address of buffer
  1412. Notes:    reading starts at the current logical cursor position; the cursor is
  1413.       updated to point at the character following the last one read
  1414.     any translucent blanks (FFh) which are visible on screen are changed
  1415.       to the character which is seen through them
  1416.     the string produced by the read is placed in an input buffer which may
  1417.       be reused by the next READ or READN of a window
  1418.     window stream opcodes D8h and D9h determine whether the read returns
  1419.       characters or attributes
  1420. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  1421. --------Q-1512--BH04-------------------------
  1422. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1423.     AH = 12h
  1424.     BH = 04h
  1425.     BL = object
  1426.         00h handle is DWORD on top of stack
  1427.         mailbox: wait for and get next message
  1428.         keyboard: wait for and get pointer to next input buffer
  1429.         pointer: wait for and get next message
  1430.         02h get next message from mailbox (task's handle on top of stack)
  1431.         03h get next message from current task's mailbox
  1432.         04h get the next input from keyboard (handle on top of stack)
  1433.         05h get the next input from task's default keyboard
  1434.         06h wait for input from any object in OBJECTQ (handle on stack)
  1435.         07h wait for input from any object in task's default OBJECTQ
  1436. Return: STACK: (if objectq) DWORD handle of object with input
  1437.            (otherwise)  DWORD number of bytes
  1438.                 DWORD address
  1439. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1440.       containing the character code as returned by the BIOS; the BIOS scan
  1441.       code is available via the STATUS call if the character is zero
  1442.     for a keyboard in field mode, the input buffer format is determined
  1443.       by the field table header for the window the keyboard is attached to
  1444.     keyboard input buffers and mailbox message buffers may be invalidated
  1445.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1446. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  1447.  
  1448. Format of pointer message:
  1449. Offset    Size    Description
  1450.  00h    WORD    row
  1451.  02h    WORD    column
  1452.  04h    BYTE    status
  1453.         bit 7: set when press/release mode active and button pressed
  1454.         bit 6: set when press/release mode active and button released
  1455.         bits 7-2: number of clicks-1 if multiple-click mode active
  1456.         bits 1,0: button pressed (00=none,01=button1,10=button2)
  1457.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1458. --------Q-1512--BX0400-----------------------
  1459. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1460.     AH = 12h
  1461.     BX = 0400h
  1462.     STACK: DWORD timer's handle
  1463. Return: after timer expires
  1464.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1465. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  1466. --------Q-1512--BX0400-----------------------
  1467. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1468.     AH = 12h
  1469.     BX = 0400h
  1470.     STACK: DWORD handle of panel object
  1471.            DWORD window's handle (or 0 for current task's window)
  1472.            DWORD length of panel name
  1473.            DWORD pointer to panel name
  1474. Return: STACK: DWORD handle of window which was used
  1475.            DWORD handle of keyboard or 0
  1476. Notes:    status of APPLY may be checked with STATUS message
  1477.     panel MUST have the following format
  1478.       first byte must be 1Bh (i.e. must start with a stream)
  1479.       first opcode in stream must be E5h
  1480.         single byte arg of opcode is interpreted thus:
  1481.           bits 7,6    11 means create new window
  1482.             10 means create new field table for existing window
  1483.             01 means use existing window and field table
  1484.           bit 5 if set, panel contains a field table
  1485.             (creates a new keyboard and puts it in field mode)
  1486.           bit 4 if set, panel contains input fields
  1487.           bit 3 if set, panel contains select fields but no input fields
  1488.     if the panel contains input or select fields, a keyboard handle is
  1489.       returned; either the window's current open keyboard or a
  1490.       newly-created keyboard object.  The caller should read that keyboard
  1491.       to obtain input from the panel.
  1492. SeeAlso: AH=12h/BH=84h
  1493. --------Q-1512--BH05------------------------
  1494. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1495.     AH = 12h
  1496.     BH = 05h
  1497.     BL = object
  1498.         00h handle is DWORD on top of stack
  1499.         timer: start timer to end at a specified time
  1500.         keyboard: add input buffer to queue
  1501.         pointer: move pointer icon to specified position
  1502.         02h send message by value/status=0 to mbox (task's handle on stack)
  1503.         03h send message by value/status=0 to current task's mailbox
  1504.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1505.         05h add input buffer to task's default KEYBOARD queue
  1506.         06h add an object to OBJECTQ (handle on top of stack)
  1507.         07h add an object to task's default OBJECTQ
  1508.     STACK: (if mailbox)  DWORD length
  1509.                  DWORD address
  1510.            (if keyboard) DWORD status (scan code in keystroke mode)
  1511.                  DWORD length (should be 1 in keystroke mode)
  1512.                  DWORD address
  1513.            (if objectq)  DWORD handle of object to add
  1514.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1515.                    only accurate to 1/18 sec)
  1516.            (if pointer)  DWORD column relative to origin of window
  1517.                  DWORD row relative to origin of window
  1518. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1519.     the data and status written to a keyboard object must match the format
  1520.       returned by the keyboard object in the current mode
  1521.     the pointer position is scaled according to the current scaling factors
  1522. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1523. --------Q-1512--BH05-------------------------
  1524. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1525.     AH = 12h
  1526.     BH = 05h
  1527.     BL = window to write to
  1528.         00h DWORD on top of stack is window handle
  1529.         01h write string to task's default window
  1530.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1531.         0Dh (DV 2.26+) default window of parent of current task
  1532.     STACK: DWORD object handle if handle passed on stack
  1533.            DWORD total length of string (high word == 0)
  1534.            DWORD address of string to display
  1535. Return: indicated actions performed
  1536.     a. non-control characters are displayed (opcodes DEh and DFh control
  1537.        whether the attributes are left or changed to the current attrib)
  1538.     b. CR/LF/BS/Tab cause the usual cursor movement
  1539.     c. ESC starts a data structure with additional commands if following
  1540.        byte is less than 20h; otherwise, it is written to the window
  1541.     STACK:    DWORD handle of new window if window stream opcode E6h
  1542.         else nothing
  1543. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1544.  
  1545. Data Structure:
  1546.     MAGIC  DB  1Bh
  1547.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  1548.     LENGTH DW  ?   ; length of remainder in bytes
  1549.     var-length fields follow, each an OPCODE followed by
  1550.          zero or more args
  1551.  
  1552. MODE 00h (set or display values) "WINDOW STREAM"
  1553.     Opcodes:args
  1554.     00h  display 20h blanks with the default attribute
  1555.     01h-1Fh display OPCODE blanks with the default attribute
  1556.     20h  display char with default attribute 20h times
  1557.          BYTE char to repeat
  1558.     21h-3Fh display char with default attribute OPCODE-20h times
  1559.          BYTE char to repeat
  1560.     40h  display 20h blanks with specified attribute
  1561.          BYTE attribute of blanks
  1562.     41h-5Fh display OPCODE-40h blanks with specified attribute
  1563.          BYTE attribute of blanks
  1564.     60h  display next 20h characters
  1565.          20h BYTEs characters to display
  1566.     61h-7Fh display next OPCODE-60h characters
  1567.          N BYTEs characters to display
  1568.     80h-87h     display N blanks with default attribute
  1569.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1570.               [000h means 800h]
  1571.     88h-8Fh display N copies of the character
  1572.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1573.               [000h means 800h]
  1574.          BYTE character to repeat
  1575.     90h-97h     display N blanks with specified attribute
  1576.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1577.               [000h means 800h]
  1578.          BYTE attribute
  1579.     98h-9FH     display string at logical cursor pos
  1580.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1581.               [000h means 800h]
  1582.          N BYTEs string to display
  1583.     A0h  set logical cursor row
  1584.          BYTE row number (0 is top)
  1585.     A1h  set logical cursor column
  1586.          BYTE column number (0 is leftmost)
  1587.     A2h  set top edge of scrolling region
  1588.          BYTE row
  1589.     A3h  set left edge of scrolling region
  1590.          BYTE column
  1591.     A4h  set row of physical window position
  1592.          BYTE line
  1593.     A5h  set column of physical window position
  1594.          BYTE column
  1595.     A6h  set height of physical window
  1596.          BYTE #rows
  1597.     A7h  set width of physical window
  1598.          BYTE #columns
  1599.     A8h  set viewport row
  1600.          BYTE row
  1601.     A9h  set viewport column
  1602.          BYTE column
  1603.     AAh  set virtual screen height [contents of window unpredictable after]
  1604.          BYTE rows
  1605.     ABh  set virtual screen width [contents of window unpredictable after]
  1606.          BYTE columns
  1607.     ACh-AEh     unused
  1608.     AFh  set compatible/preferred video modes
  1609.          BYTE compatibility/preference mask
  1610.         bit 7    compatible with monochrome
  1611.         bit 6    compatible with color text, EGA/VGA graphics
  1612.         bit 5    compatible with medium-resolution CGA graphics
  1613.         bit 4    compatible with high-resolution CGA graphics
  1614.         bit 3    prefer monochrome
  1615.         bit 2    prefer color text, EGA/VGA graphics
  1616.         bit 1    prefer medium-resolution CGA graphics
  1617.         bit 0    prefer high-resolution CGA graphics
  1618.     B0h  move logical cursor down
  1619.          BYTE #rows (signed, negative values move up)
  1620.             [if #rows=0 and hardware cursor owner, update hw crsr]
  1621.     B1h  move logical cursor right
  1622.          BYTE #cols (signed, negative values move left)
  1623.             [if #cols=0 and hardware cursor owner, update hw crsr]
  1624.     B2h  shift top edge of scrolling region
  1625.          BYTE #rows (signed)
  1626.     B3h  shift left edge of scrolling region
  1627.          BYTE #cols (signed)
  1628.     B4h  shift physical window down
  1629.          BYTE #lines (signed)
  1630.     B5h  shift physical window right
  1631.          BYTE #columns (signed)
  1632.     B6h  expand physical window vertically
  1633.          BYTE #lines (signed)
  1634.     B7h  expand physical window horizontally
  1635.          BYTE #columns (signed)
  1636.     B8h  adjust viewport row
  1637.          BYTE #rows (signed)
  1638.     B9h  adjust viewport column
  1639.          BYTE #columns (signed)
  1640.     BAh  adjust virtual screen height [contents of window unpredict after]
  1641.          BYTE #rows to increase (signed)
  1642.     BBh  adjust virtual screen width [contents of window unpredictbl after]
  1643.          BYTE #cols to increase (signed)
  1644.     BCh-BFh     reserved (currently unused)
  1645.     C0h  set logical cursor position
  1646.          BYTE row number (0 is top border)
  1647.          BYTE column number (0 is left border)
  1648.     C1h  set top left corner of scrolling region
  1649.          BYTE row
  1650.          BYTE column
  1651.     C2h  set physical window pos
  1652.          BYTE upper left row (no top border if 0)
  1653.          BYTE upper left column (no left border if 0)
  1654.     C3h  set current window size
  1655.          BYTE #rows
  1656.          BYTE #cols
  1657.     C4h  set upper left corner of viewport (portion of virtual screen
  1658.          displayed in window)
  1659.          BYTE row
  1660.          BYTE column
  1661.     C5h  set size of virtual screen [contents unpredictable afterwards]
  1662.          BYTE #rows
  1663.          BYTE #cols
  1664.     C6h  unused
  1665.     C7h  unused
  1666.     C8h  set logical cursor relative to current position
  1667.          BYTE number of rows to move down (signed)
  1668.          BYTE number of columns to move right (signed)
  1669.           [if #rows=#cols=0 and hardware cursor owner, update hw cursr]
  1670.     C9h  shift top left corner of scrolling region
  1671.          BYTE #rows (signed)
  1672.          BYTE #cols (signed)
  1673.     CAh  set window pos relative to current position
  1674.          BYTE number of rows to shift down (signed)
  1675.          BYTE number of columns to shift right (signed)
  1676.     CBh  set window size relative to current size
  1677.          BYTE number of rows to expand (signed)
  1678.          BYTE number of cols to expand (signed)
  1679.     CCh  shift viewport relative to current position
  1680.          BYTE rows to shift (signed)
  1681.          BYTE cols to shift (signed)
  1682.     CDh  resize virtual screen
  1683.          BYTE #rows to expand (signed)
  1684.          BYTE #cols to expand (signed)
  1685.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1686.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1687.     D0h  allow window frame to extend beyond screen
  1688.     D1h  always display a complete frame, even if window extends beyond
  1689.          edge of screen
  1690.     D2h  allow DV to change logical colors on video mode switch (default)
  1691.     D3h  application changes logical attributes
  1692.     D4h  window is visible [must redraw to actually make visible]
  1693.     D5h  window is hidden [must redraw to actually remove]
  1694.     D6h  window has frame (default)
  1695.     D7h  window unframed [must redraw to actually remove frame]
  1696.     D8h  READ/READN will read characters from window (default)
  1697.     D9h  READ/READN will read attributes from window
  1698.     DAh  use logical attributes, which may be remapped
  1699.         attributes
  1700.            1 normal text
  1701.            2 highlighted normal text
  1702.            3 help text
  1703.            4 highlighted help text
  1704.            5 error message
  1705.            6 highlighted error message
  1706.            7 emphasized text
  1707.            8 marked text
  1708.            9-16 are reverse video versions of 1-8
  1709.     DBh  use physical attributes for characters
  1710.     DCh  enable special actions for control characters (default)
  1711.     DDh  disable special control char handling, all chars displayable by
  1712.          BIOS TTY call
  1713.     DEh  write both character and attribute (default)
  1714.     DFh  write character only, leave attribute untouched
  1715.     E0h  repeat following commands through E1h opcode
  1716.          BYTE number of times to repeat (00h means 256 times)
  1717.     E1h  end of commands to repeat, start repeating them
  1718.     E2h  set current output color
  1719.          BYTE color
  1720.     E3h  clear virtual screen from scroll origin to end using current color
  1721.     E4h  redraw window
  1722.     E5h  select menu style
  1723.          BYTE style (normally 18h)
  1724.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1725.           this stream
  1726.     E5h  (panel file only)
  1727.          BYTE modifier
  1728.         bits 7,6 = 11 panel stream creates new window
  1729.              = 10 panel defines new field table for existing window
  1730.              = 01 panel stream uses existing window & field table
  1731.         bit 5 = 1 stream contains a field table (create kyboard object)
  1732.         bit 4 = 1 stream defines input fields (create keyboard object)
  1733.         bit 3 = 1 stream defines select fields but not input fields
  1734.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1735.         bit 1 reserved
  1736.         bit 0 reserved
  1737.     E6h  create new window and perform rest of manipulations in new window
  1738.          BYTE number of rows
  1739.          BYTE number of columns
  1740.          Return: DWORD object handle of new window returned on stack at end
  1741.          Note: the window is created with a physical size of 0x0 at the
  1742.              same position as the window to which this stream was sent
  1743.     E7h  no operation
  1744.     E8h  scroll area up (top left corner defined by opcode C1h)
  1745.          BYTE height
  1746.          BYTE width
  1747.     E9h  scroll area down (top left corner defined by opcode C1h)
  1748.          BYTE height
  1749.          BYTE width
  1750.     EAh  scroll area left (top left corner defined by opcode C1h)
  1751.          BYTE height
  1752.          BYTE width
  1753.     EBh  scroll area right (top left corner defined by opcode C1h)
  1754.          BYTE height
  1755.          BYTE width
  1756.     ECh  set logical attributes for window contents
  1757.          BYTE video modes command applies to
  1758.         bit 7    monochrome
  1759.         bit 6    color text, EGA/VGA graphics
  1760.         bit 5    medium-resolution CGA graphics
  1761.         bit 4    high-resolution CGA graphics
  1762.          BYTE which attributes to set
  1763.         bit 7  if set, copy single following byte to indicated attribs
  1764.         bits 4-6  # of first attribute to change - 1
  1765.         bits 0-3  # of consecutive attributes to change
  1766.          N BYTEs new attributes
  1767.     EDh  set logical attributes for window frame
  1768.          BYTE video modes command applies to (see opcode ECh)
  1769.          BYTE which attributes to set
  1770.         bit 7  if set, copy single following byte to indicated attrs
  1771.         bits 4-6  # of first attribute to change - 1
  1772.         bits 0-3  # of consecutive attributes to change
  1773.          N BYTEs new attributes
  1774.           attributes
  1775.                1 = top left corner
  1776.                2 = top right corner
  1777.                3 = bottom left corner
  1778.                4 = bottom right corner
  1779.                5 = top edge
  1780.                6 = bottom edge
  1781.                7 = left edge
  1782.                8 = right edge
  1783.     EEh  set characters for window frame
  1784.          BYTE video modes command applies to (see opcode ECh)
  1785.          BYTE which characters to set
  1786.         bit 7  if set, copy single following byte to indicated chars
  1787.         bits 4-6  # of first char to change - 1
  1788.         bits 0-3  # of consecutive chars to change
  1789.          N BYTEs new chars (same relative position as attributes above)
  1790.     EFh  set window name
  1791.          BYTE length of name (should be in range 0 to logical screen width)
  1792.          N BYTEs name
  1793.     F0h  clear input field to blanks
  1794.          BYTE field number
  1795.     F1h  fill input field with character
  1796.          BYTE field number
  1797.          BYTE char
  1798.     F2h  set color of input field
  1799.          BYTE field number (1-N)
  1800.          BYTE attribute
  1801.     F3h  set initial contents of input field
  1802.          BYTE field number (1-N)
  1803.          N BYTEs enough chars to exactly fill field as defined by op FFh
  1804.     F4h  position cursor to start of specific input field
  1805.          BYTE field number (1-N)
  1806.     F5h  change field table entry
  1807.          BYTE field number
  1808.          7-8 BYTEs field table entry (see opcode FFh below)
  1809.     F6h  set field type
  1810.          BYTE field number
  1811.          BYTE type
  1812.             00h inactive
  1813.             40h output field
  1814.             80h input field
  1815.             C0h deselected field
  1816.             C2h selected field
  1817.     F7h  "broadcast write"    write data to fields with program output bit
  1818.         set in field table entry, in field number order
  1819.          N BYTEs (total length of all program output fields)
  1820.     F8h  scroll field up a line
  1821.          BYTE field number
  1822.     F9h  scroll field down a line
  1823.          BYTE field number
  1824.     FAh  scroll field left
  1825.          BYTE field number
  1826.     FBh  scroll field right
  1827.          BYTE field number
  1828.     FCh  set field table header
  1829.          BYTE number of fields (must be <= existing number of fields)
  1830.          BYTE screen behavior bits
  1831.         bit 7  reserved
  1832.         bit 6  set if menu items may be selected via keyboard
  1833.         bit 5  set if left mouse button in "status" mode (press
  1834.             anywhere in window immediately returns control to app)
  1835.         bit 4  set if right mouse button in "status" mode
  1836.         bit 3  if set, select fields return contents or blanks rather
  1837.             than 'Y' or 'N'
  1838.         bit 2  if set, modified bits reset on return to application
  1839.         bits 0,1 = 00 no data returned on read of keyboard
  1840.                01 data returned as array of chars containing
  1841.                 all fields packed together, with no field
  1842.                 numbers
  1843.                10 data returned as numbered variable-length
  1844.                 records for all fields
  1845.                11 data returned as numbered variable-length
  1846.                 records for the fields which were modified
  1847.          BYTE current input field (updated by DESQview)
  1848.          BYTE current select field (updated by DESQview)
  1849.          BYTE attribute for select fields when they are pointed at
  1850.          BYTE attribute for select fields which have been selected
  1851.     FDh  reset modified bit for all fields
  1852.     FEh  reset selected and modified bits for all fields
  1853.     FFh  set up input fields
  1854.          6 BYTEs table header (see opcode FCh above)
  1855.          the field table entries, one for each field
  1856.          BYTE start row       \
  1857.          BYTE start column  \ if menu selection and start is to
  1858.          BYTE end row        / right or below end, select from kbd only
  1859.          BYTE end column   /
  1860.          BYTE field type
  1861.             bits 7,6 = 00 inactive (non-entry) field
  1862.                    01 echos keystrokes input to make menu selection
  1863.                    10 fill-in field
  1864.                    11 select field
  1865.             bit 5  field can be filled by broadcast write (F7h opcode)
  1866.             bit 4  reserved
  1867.             bit 3  reserved
  1868.             bit 2  reserved
  1869.             bit 1  set if field selected
  1870.             bit 0  set if field modified
  1871.          BYTE modifier
  1872.               if type is fill-in, then bit flags to determine behavior
  1873.               bit 7     if set, automatically enter CR when field full
  1874.               bit 6     move to next field when current field is full
  1875.               bit 5     if set, enter text from right end (for numbers)
  1876.               bit 4     if set, force input to uppercase
  1877.               bit 3     if set, clear old contents on first keystroke
  1878.               bit 2     if set, input returned when cursor moves out
  1879.                  of modified field ("validate",API level 2.02+)
  1880.               bit 1     reserved
  1881.               bit 0     reserved
  1882.               if select field, first key to press to activate
  1883.               00h if have to point-&-click or is an extended-ASCII
  1884.                   keystroke (only if two-key menus enabled)
  1885.          BYTE (select field only) normal color of field
  1886.          BYTE second key for select field.  This byte is present iff
  1887.               two-letter menu entries selected with opcode E5h, and
  1888.               in that case is present regardless of field type
  1889.          Note: DESQview uses and updates the actual copy of the information
  1890.            which is contained in the stream.  Thus this info must remain
  1891.            intact until after the data entry is complete.
  1892.  
  1893. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  1894.     A0h return logical cursor row in next byte
  1895.     A1h return logical cursor column in next byte
  1896.     A2h return top row of scrolling region in next byte
  1897.     A3h return left column of scrolling region in next byte
  1898.     A4h return row of physical window origin in next byte
  1899.     A5h return column of physical window origin in next byte
  1900.     A6h return height of physcial window in next byte
  1901.     A7h return width of physical window in next byte
  1902.     A8h return row of viewport origin in next byte
  1903.     A9h return column of viewport origin in next byte
  1904.     AAh return height of virtual screen in next byte
  1905.     ABh return width of virtual screen in next byte
  1906.     AFh return current video mode in next byte
  1907.     C0h return current logical cursor position in next two bytes
  1908.     C1h return top left corner of scrolling region in next two bytes
  1909.     C2h return current window position in next two bytes
  1910.     C3h return current window size in next two bytes
  1911.     C4h return current viewport origin in next two bytes
  1912.     C5h return current virtual screen size in next two bytes
  1913.     D0h \ overwritten with D0h if frames may fall off screen edge
  1914.     D1h /               D1h if frames always displayed entirely
  1915.     D2h \ overwritten with D2h if DESQview controls color palette
  1916.     D3h /               D3h if application changes color palette
  1917.     D4h \ overwritten with D4h if window visible
  1918.     D5h /               D5h if window hidden
  1919.     D6h \ overwritten with D6h if window has frame
  1920.     D7h /               D7h if window unframed
  1921.     D8h \ overwritten with D8h if reading characters from window
  1922.     D9h /               D9h if reading attributes from window
  1923.     DAh \ overwritten with DAh if using logical attributes
  1924.     DBh /               DBh if using physical attributes
  1925.     DCh \ overwritten with DCh if TTY control char interpretation on
  1926.     DDh /               DDh if TTY control char interpretation off
  1927.     DEh \ overwritten with DEh if writing both characters and attributes
  1928.     DFh /               DFh if leaving attributes untouched
  1929.     E2h return current color in next byte
  1930.     ECh get logical attributes for window contents
  1931.         BYTE execute call if currently in specified video mode
  1932.         bit 7    monochrome
  1933.         bit 6    color text, EGA/VGA graphics
  1934.         bit 5    medium-resolution CGA graphics
  1935.         bit 4    high-resolution CGA graphics
  1936.         BYTE which attributes to get
  1937.         bit 7 unused???
  1938.         bits 4-6 first attribute to get - 1
  1939.         bits 0-3 # consecutive attributes
  1940.         N BYTEs buffer to hold attributes
  1941.     EDh get logical attributes for window frame
  1942.         BYTE execute call if currently in video mode (see opcode ECh)
  1943.         BYTE which attributes to get
  1944.         bit 7 unused???
  1945.         bits 4-6 first attribute to get - 1
  1946.         bits 0-3 # consecutive attributes
  1947.         N BYTEs buffer to hold attributes
  1948.     EEh get characters for window frame
  1949.         BYTE execute call if currently in video mode (see opcode ECh)
  1950.         BYTE which attributes to get
  1951.         bit 7 unused???
  1952.         bits 4-6 first char to get - 1
  1953.         bits 0-3 # consecutive chars
  1954.         N BYTEs buffer to hold chars
  1955.     EFh return first N characters of current window name
  1956.         BYTE    max length of returned name
  1957.         N BYTEs buffer to hold window name
  1958.     F3h return contents of specified field
  1959.         BYTE field number
  1960.         N BYTEs buffer to hold field contents (size exactly equal to field
  1961.             size)
  1962.     F5h get field table entry
  1963.         BYTE field number
  1964.         7-8 BYTEs buffer to hold field table entry
  1965.            Notes: DV < 2.26 always returns 7 bytes
  1966.               DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field
  1967.             table is using 8-byte entries and eighth byte after
  1968.             F5h is E7h (NOP); otherwise, 7 bytes are returned
  1969.               DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes
  1970.             depending on the field table entry size
  1971.     F6h get type of a field
  1972.         BYTE field number
  1973.         BYTE type
  1974.     FCh get field table header
  1975.         6 BYTEs buffer to store header
  1976.  
  1977. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1978.     00h allow window to be moved horizontally
  1979.     01h allow window to be moved vertically
  1980.     02h allow window to change width
  1981.     03h allow window to change height
  1982.     04h allow window to be scrolled horizontally
  1983.     05h allow window to be scrolled vertically
  1984.     06h allow "Close Window" menu selection for application
  1985.     07h allow "Hide Window" menu selection for application
  1986.     08h allow application to be suspended ("Rearrange/Freeze")
  1987.     0Eh allow "Scissors" menu
  1988.     10h allow DESQview main menu to be popped up
  1989.     11h allow "Switch Windows" menu
  1990.     12h allow "Open Window" menu
  1991.     13h allow "Quit" menu selection
  1992.     20h-33h opposite of 00h-13h, disallow specified action
  1993.     40h notify if horizontal position of window changes
  1994.     41h notify if vertical position of window changes
  1995.     42h notify if width of window changes
  1996.     43h notify if height of window changes
  1997.     44h notify if window scrolled horizontally
  1998.     45h notify if window scrolled vertically
  1999.     46h notify if window is closed--program has to clean up and exit itself
  2000.     47h notify if window is hidden
  2001.     48h notify if "?" on main menu selected
  2002.     49h notify if pointer message sent to window
  2003.     4Ah notify if window is placed in foreground
  2004.     4Bh notify if window is placed in background
  2005.     4Ch notify if video mode changes
  2006.     4Dh notify if "Scissors" menu "Cut" option selected
  2007.     4Eh notify if "Scissors" menu "Copy" option selected
  2008.     4Fh notify if "Scissors" menu "Paste" option selected
  2009.     50h notify if DESQview main menu about to pop up
  2010.     51h notify if DESQview main menu popped down
  2011.     60h-71h     opposite of 40h-51h: don't notify on specified event
  2012.     84h attach window to parent task's window (both move together)
  2013.     85h detach window from parent task's window (may move independently)
  2014.     86h disable background operation for application
  2015.     87h enable running in background
  2016.     88h set minimum size of physical window
  2017.         BYTE rows
  2018.         BYTE columns
  2019.     89h set maximum size of physical window
  2020.         BYTE rows
  2021.         BYTE cols
  2022.     8Ah set primary asynchronous notification routine
  2023.         DWORD address of routine, 0000h:0000h means none (see also below)
  2024.     8Bh set async notification parameter
  2025.         DWORD 32-bit value passed to 8Ah async routine in DS:SI
  2026.     ACh (DV2.2+) perform regular select field attribute processing
  2027.     ADh (DV2.2+) protect attributes in selected field from being lost
  2028.     AEh make window default notify window for owning app (API level 2.00+)
  2029.     AFh set selected field marker character
  2030.         BYTE character to display at left edge of selected fields
  2031.     BCh set standard field processing mode
  2032.     BDh set alternate field processing mode (enables cursor pad for menus)
  2033.     BEh disables changing reverse logical attributes with ECh opcode
  2034.     BFh enables changing reverse logical attributes with ECh opcode
  2035.     C0h make current window topmost in system
  2036.     C1h force current process into foreground
  2037.     C2h make current window topmost in process
  2038.     C3h position mouse pointer relative to origin of current field
  2039.         BYTE rows below upper left corner of field
  2040.         BYTE columns to right of upper left corner of field
  2041.     C4h position mouse pointer relative to origin of given field
  2042.         BYTE field number
  2043.         BYTE rows below upper left corner of field
  2044.         BYTE columns to right of upper left corner of field
  2045.     C5h orphan current window (also hides it)
  2046.         Note: must be last in stream; all subsequent commands ignored
  2047.     C6h show all windows for this process
  2048.     C7h hide all windows for this process
  2049.     C8h suspend process and hide all its windows
  2050.     C9h force current process into background
  2051.     CAh make current window bottom-most in process
  2052.     CBh cancel current window manager operation, remove DV menu, give
  2053.         control to topmost application
  2054.     CCh orphan window and give it to the system for use as paste data
  2055.     CEh reorder windows
  2056.         DWORD pointer to null-terminated list of words
  2057.           each word is segment of object handle for a window
  2058.     FFh no operation
  2059.  
  2060. MODES 14h to 1Fh "USER STREAMS"
  2061.     normally NOPs, but may be defined by SETESC message to invoke FAR
  2062.     routines, one for each mode number
  2063.       on entry to handler,
  2064.         DS:SI -> first byte of actual stream (not header)
  2065.         CX = #bytes in stream
  2066.         ES:DI = window's handle
  2067.  
  2068. Asynchronous notification routine defined by manager stream 8Ah called with:
  2069.     ES:DI = handle of window
  2070.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  2071.        mailbox contains message indicating event
  2072.           Opcode
  2073.            40h  horizontal movement
  2074.            DWORD object handle of window
  2075.            BYTE     new row
  2076.            BYTE     new col
  2077.            41h  vertical movement
  2078.            DWORD object handle of window
  2079.            BYTE     new row
  2080.            BYTE     new col
  2081.            42h  horizontal size change
  2082.            DWORD object handle of window
  2083.            BYTE     new rows
  2084.            BYTE     new cols
  2085.            43h  vertical size change
  2086.            DWORD object handle of window
  2087.            BYTE     new rows
  2088.            BYTE     new cols
  2089.            44h  scrolled horizontally
  2090.            DWORD object handle of window
  2091.            BYTE     mouse row within window
  2092.            BYTE     mouse column within window
  2093.            BYTE     field mouse is on, 0 if none
  2094.            BYTE     amount moved: >0 right, <0 left, 0 done
  2095.            45h  scrolled vertically
  2096.            DWORD object hande of window
  2097.            BYTE     mouse row within window
  2098.            BYTE     mouse column within window
  2099.            BYTE     field mouse is on, 0 if none
  2100.            BYTE     amount moved: >0 down, <0 up, 0 done
  2101.            46h  window close request
  2102.            DWORD object handle of window
  2103.            BYTE     mouse pointer row
  2104.            BYTE     mouse pointer column
  2105.            BYTE     field mouse is on, 0 if none
  2106.            47h  application's windows hidden
  2107.            48h  Help for Program selected
  2108.            DWORD object handle of window
  2109.            BYTE     mouse pointer row
  2110.            BYTE     mouse pointer column
  2111.            BYTE     field mouse is on, 0 if none
  2112.            49h  pointer message sent to window
  2113.            DWORD pointer handle which received message
  2114.            4Ah  switched to window from another ("raise")
  2115.            4Bh  switched away from the window ("lower")
  2116.            4Ch  video mode changed
  2117.            BYTE new BIOS video mode
  2118.            4Dh  Scissors/cUt selected
  2119.            DWORD object handle of window
  2120.            BYTE     row of upper left corner
  2121.            BYTE     column of upper left corner
  2122.            BYTE     field number ul corner is in, 0=none
  2123.            DWORD handle of orphaned window created with
  2124.              copy of data from specified region
  2125.            BYTE     height of region
  2126.            BYTE     width of region
  2127.            4Eh  Scissors/Copy selected
  2128.            DWORD object handle of window
  2129.            BYTE     row of upper left corner
  2130.            BYTE     column of upper left corner
  2131.            BYTE     field number ul corner is in, 0=none
  2132.            DWORD handle of orphaned window created with
  2133.              copy of data from specified region
  2134.            BYTE     height of region
  2135.            BYTE     width of region
  2136.            4Fh  Scissors/Paste selected
  2137.            DWORD object handle of window
  2138.            BYTE     row of upper left corner
  2139.            BYTE     column of upper left corner
  2140.            BYTE     field number ul corner is in, 0=none
  2141.            DWORD handle of orphaned window with data
  2142.            BYTE     height of region
  2143.            BYTE     width of region
  2144.             Note: orphaned data window should be adopted or freed
  2145.                 when done
  2146.            50h  main menu about to pop up
  2147.            51h  main menu popped down
  2148. Return: all registers unchanged
  2149. --------Q-1512--BH06-------------------------
  2150. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  2151.     AH = 12h
  2152.     BH = 06h
  2153.     BL = object
  2154.         00h object handle in DWORD on top of stack
  2155.         mailbox, keyboard, pointer, or timer
  2156.         (DV 2.50+) window
  2157.         01h (DV 2.50+) current task's window
  2158.         04h given task's keyboard (task's handle on top of stack)
  2159.         05h current task's default keyboard
  2160.     STACK: DWORD new priority of object in task's OBJECTQ
  2161.             (new priority of task if window handle)
  2162. Notes:    initially all objects have the same default value.  Should only make
  2163.       relative adjustments to this default value.
  2164.     when changing priorities, all objects already on the objectq are
  2165.       reordered
  2166.     for window handles, only the non-blocked task(s) with the highest
  2167.       priority receive CPU time under DESQview 2.50-2.52; the default
  2168.       priority is 0Ah
  2169. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  2170. --------Q-1512--BH07-------------------------
  2171. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  2172.     AH = 12h
  2173.     BH = 07h
  2174.     BL = object
  2175.         00h object handle in DWORD on top of stack
  2176.         mailbox, keyboard, pointer, or timer
  2177.         (DV 2.50+) window
  2178.         01h (DV 2.50+) current task's window
  2179.         04h given task's keyboard (task's handle on top of stack)
  2180.         05h current task's default keyboard
  2181. Return: STACK: DWORD object priority
  2182. Note:    initially all objects have the same default value.  Should only make
  2183.       relative adjustments to this default value.
  2184. SeeAlso: AH=12h/BH=06h
  2185. --------Q-1512--BH08-------------------------
  2186. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  2187.     AH = 12h
  2188.     BH = 08h
  2189.     BL = object
  2190.         00h handle in DWORD on top of stack
  2191.         window: total character positions in window
  2192.         timer: elapsed time since timer started
  2193.         pointer: number of messages queued to pointer object
  2194.         panel: number of panels in panel file
  2195.         keyboard: number of input buffers queued
  2196.         01h total chars in current task's default window
  2197.         02h number of messages in task's mailbox (task's handle on stack)
  2198.         03h number of messages in current task's mailbox
  2199.         04h number of input buffers queued in task's kbd (handle on stack)
  2200.         05h number of input buffers queued for current task's default kbd
  2201.         06h number of objects queued in OBJECTQ (task's handle on stack)
  2202.         07h number of objects queued in current task's OBJECTQ
  2203.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  2204.         0Dh (DV 2.26+) total chars in parent task's window
  2205. Return: DWORD on top of stack is result
  2206. Note:    for panel objects, a count of zero is returned if no panel file is open
  2207.       for the object
  2208. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  2209. --------Q-1512--BH09-------------------------
  2210. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  2211.     AH = 12h
  2212.     BH = 09h
  2213.     BL = object
  2214.         00h handle in DWORD on top of stack
  2215.         window: get chars/line
  2216.         timer: get 1/100 seconds remaining before timer expires
  2217.         mailbox: (DV/X) get number of bytes queued to mailbox
  2218.         01h get number of chars/line in current task's default window
  2219.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  2220.         0Dh (DV 2.26+) get chars/line in parent task's window
  2221. Return: DWORD on top of stack is length
  2222. SeeAlso: AH=12h/BH=08h
  2223. --------Q-1512--BH0A-------------------------
  2224. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  2225.     AH = 12h
  2226.     BH = 0Ah
  2227.     BL = window to write to
  2228.         00h window handle is DWORD on top of stack
  2229.         01h current task's default window
  2230.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2231.         0Dh (DV 2.26+) default window of parent of current task
  2232.     STACK:    DWORD count of attributes
  2233.         DWORD address of attribute string
  2234.         DWORD count of characters
  2235.         DWORD address of character string
  2236. Notes:    if one string is longer than the other, the shorter one will be reused
  2237.       until the longer one is exhausted
  2238.     the cursor is left just after the last character written
  2239. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  2240. --------Q-1512--BH0A-------------------------
  2241. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  2242.     AH = 12h
  2243.     BH = 0Ah
  2244.     BL = mailbox to write to
  2245.         00h handle is DWORD on top of stack
  2246.         02h default mailbox of task whose handle is on top of stack
  2247.         03h current task's default mailbox
  2248.     STACK:    DWORD    status (low byte)
  2249.         DWORD    length of message
  2250.         DWORD    address of message
  2251. Notes:    the message is copied into either system or common memory
  2252.     insufficient memory normally causes the process to be aborted; under
  2253.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  2254. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  2255. --------Q-1512--BH0A-------------------------
  2256. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  2257.     AH = 12h
  2258.     BH = 0Ah
  2259.     BL = object
  2260.         00h handle is DWORD on top of stack
  2261.         timer: start timer for specified interval
  2262.         pointer: set control flags
  2263.         keyboard: set control flags
  2264.         04h set control flags on KEYBOARD object (handle on top of stack)
  2265.         05h set control flags on task's default KEYBOARD object
  2266.     STACK: (if timer)   DWORD duration in 1/100 seconds
  2267.            (otherwise)  DWORD bits to set
  2268. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  2269.  
  2270. For keyboard objects, the bits have the following significance:
  2271.     bit 15 reserved, can't be set
  2272.     bit 14 unused
  2273.     bit 13 reserved, can't be set
  2274.     bit 12-6 unused
  2275.     bit 5  (DV 2.2+) exclusive input
  2276.     bit 4  filter all keys (used with handler established by SETESC)
  2277.         if 0, only keys that would normally be displayed are filtered
  2278.     bit 3  program continues executing while input in progress
  2279.     bit 2  insert mode active for field mode
  2280.     bit 1  hardware cursor displayed when task is hardware cursor owner
  2281.         must be set if keyboard in field mode and field table includes
  2282.         input fields
  2283.     bit 0  keyboard is in field mode rather than keystroke mode
  2284.  
  2285. For pointer objects, the bits have the following significance:
  2286.     bit 15 reserved, can't be set
  2287.     bit 14-8 unused
  2288.     bit 7  mouse pointer is hidden while in window
  2289.     bit 6  get messages even if window not topmost
  2290.     bit 5  get messages even if window not foreground
  2291.     bit 4  multiple clicks separated by less than 1/3 second are counted
  2292.         and returned in a single message
  2293.     bit 3  pointer position is relative to screen origin, not window origin
  2294.     bit 2  send message on button release as well as button press
  2295.     bit 1  (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever
  2296.         pointer leaves the window
  2297.     bit 0  send message only on button activity, not movement
  2298.            DV-specific, and INT 15/AX=DE0Fh must have been called first
  2299. --------Q-1512--BH0B-------------------------
  2300. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  2301.     AH = 12h
  2302.     BH = 0Bh
  2303.     BL = window to write attributes to
  2304.         00h handle is DWORD on top of stack
  2305.         01h current task's default window
  2306.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2307.         0Dh (DV 2.26+) default window of parent of current task
  2308.     STACK:    DWORD number of attributes to write
  2309.         DWORD address of attributes
  2310. Note:    the attributes are written starting at the current cursor position; the
  2311.       cursor is left just after the last position written
  2312. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  2313. --------Q-1512--BH0B-------------------------
  2314. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  2315.     AH = 12h
  2316.     BH = 0Bh
  2317.     BL = mailbox to write to
  2318.         00h handle is DWORD on top of stack
  2319.         02h default mailbox of task whose handle is on top of stack
  2320.         03h current task's default mailbox
  2321.     STACK:    DWORD    status (low byte)
  2322.         DWORD    length of message
  2323.         DWORD    address of message
  2324. Notes:    only a pointer to the message is stored, but the write may still fail
  2325.       due to insufficient memory
  2326.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  2327. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  2328. --------Q-1512--BH0B-------------------------
  2329. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  2330.     AH = 12h
  2331.     BH = 0Bh
  2332.     BL = OBJECTQ from which to remove all copies of a particular object
  2333.         06h OBJECTQ of task whose handle is on top of stack
  2334.         07h task's default OBJECTQ
  2335.     STACK:    DWORD    handle of object to remove
  2336. Note:    should be sent whenever an object is erased or closed
  2337. --------Q-1512--BH0B-------------------------
  2338. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  2339.     AH = 12h
  2340.     BH = 0Bh
  2341.     BL = object
  2342.         00h handle is DWORD on top of stack
  2343.         pointer: reset control flags
  2344.         keyboard: reset control flags
  2345.         04h clear control flags on KEYBOARD object (handle on top of stack)
  2346.         05h clear control flags on task's default KEYBOARD object
  2347.     STACK:    DWORD    which bits to clear (see AH=12h/BH=0Ah"OBJECT")
  2348. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  2349. --------Q-1512--BH0C-------------------------
  2350. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  2351.     AH = 12h
  2352.     BH = 0Ch
  2353.     BL = object
  2354.         00h handle is DWORD on top of stack
  2355.         window:      fill with given character from scroll origin to end
  2356.         keyboard: attach to a window
  2357.         timer:      open
  2358.         pointer:  start taking input for window
  2359.         panel:      associate with a panel file
  2360.         01h fill task's default window with given char from scrl org to end
  2361.         02h open given task's mailbox for input (task's handle on stack)
  2362.         03h open current task's mailbox
  2363.         04h attach a KEYBOARD to a window (handle on top of stack)
  2364.         05h attach task's default KEYBOARD to a window
  2365.         06h open a task's OBJECTQ (task's handle on top of stack)
  2366.         07h open current task's OBJECTQ
  2367.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  2368.         0Dh (DV 2.26+) fill default window of parent of current task
  2369.      STACK: (if window)   DWORD character to fill with
  2370.         (if keyboard) DWORD handle of window to attach to
  2371.         (if pointer)  DWORD handle of window to attach to
  2372.         (if panel)    DWORD length of filename or resident panel
  2373.                   DWORD address of filename or resident panel
  2374.         (otherwise)   nothing
  2375. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  2376.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  2377.       the panel file
  2378.     result code of open may be retrieved with STATUS message
  2379.     logical cursor is left at scroll origin after filling window
  2380.     the task opening a mailbox becomes its owner, and the only task allowed
  2381.       to read the mailbox
  2382.     messages are only sent to a pointer object when the mouse is positioned
  2383.       in the window to which the pointer has been attached
  2384.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  2385.       messages automatically open the timer
  2386. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  2387. --------Q-1512--BH0D-------------------------
  2388. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  2389.     AH = 12h
  2390.     BH = 0Dh
  2391.     BL = object
  2392.         00h handle is DWORD on top of stack
  2393.         timer:      close
  2394.         keyboard: detach from window and discard queued input
  2395.         pointer:  stop taking input
  2396.         panel:      close
  2397.         mailbox:  close, unlock, and discard any pending messages
  2398.         02h close given task's mailbox (task's handle on top of stack)
  2399.         03h close task's default mailbox
  2400.         04h close KEYBOARD object (handle on top of stack)
  2401.         05h close task's default KEYBOARD
  2402.         06h close givent task's OBJECTQ (task's handle on top of stack)
  2403.         07h close current task's OBJECTQ
  2404. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2405.       ERASE message (AH=12h/BH=0Eh)
  2406.     when a panel object is closed, the panel file and any panels currently
  2407.       in use are freed; window and keyboard objects created by APPLY are
  2408.       not affected, but field mode input ceases
  2409.     open but idle timer objects consume a small amount of CPU time
  2410. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2411. --------Q-1512--BH0E-------------------------
  2412. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2413.     AH = 12h
  2414.     BH = 0Eh
  2415.     BL = object
  2416.         00h handle is DWORD on top of stack
  2417.         window:      clear from scroll origin to end of window
  2418.         keyboard: discard input
  2419.         timer:      cancel current interval
  2420.         pointer:  discard all pending messages
  2421.         mailbox:  discard all pending messages
  2422.         01h clear task's default window from scroll origin to end
  2423.         02h discard all queued messages in mailbox (handle on top of stack)
  2424.         03h discard all queued messages in current task's default mailbox
  2425.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2426.         05h discard all input queued to task's default KEYBOARD
  2427.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2428.         07h remove all objects from current task's OBJECTQ
  2429.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2430.         0Dh (DV 2.26+) clear default window of parent of current task
  2431. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2432. SeeAlso: AH=12h/BH=02h
  2433. --------Q-1512--BH0F-------------------------
  2434. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2435.     AH = 12h
  2436.     BH = 0Fh
  2437.     BL = object
  2438.         00h handle is DWORD on top of stack
  2439.         timer:     is it running?
  2440.         pointer: return status of last message
  2441.         panel:     verify success of last OPEN or APPLY
  2442.         02h return status of last msg READ from mailbox (handle on stack)
  2443.         03h return status of last msg READ from task's default mailbox
  2444.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  2445.         05h get status of last msg from task's default KEYBOARD
  2446.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2447.         07h return whether task's default OBJECTQ is open or not
  2448. Return: DWORD on top of stack is status
  2449. Notes:    if object is a panel object, the status indicates the error code:
  2450.       00h successful
  2451.       14h panel name not in panel directory
  2452.       15h not enough memory to apply panel
  2453.       16h invalid panel format
  2454.       17h panel file already open
  2455.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2456.       95h not enough memory to open panel file     > that the panel was
  2457.       98h null panel file name            /  not opened
  2458.     if object is a timer, the status is:
  2459.       00000000h open but not running
  2460.       40000000h open and running
  2461.       80000000h closed
  2462.     if object is an OBJECTQ, the status is:
  2463.       00000000h open
  2464.       80000000h closed
  2465.     if object is a keyboard in keystroke mode, the status is the extended
  2466.       character code (scan code) of teh last keystroke
  2467.     if object is a keyboard in field mode, the status indicates the reason
  2468.       for the last return from the field manager
  2469.       00h Enter key pressed
  2470.       01h Button 1 or keystroke selection
  2471.       02h Button 2
  2472.       03h validation
  2473.       04h auto Enter on field
  2474.       1Bh Escape pressed
  2475.       46h ^Break pressed
  2476.       other: extended code for key terminating input
  2477.     the status of mailbox messages sent by the window manager is always 80h
  2478.     the status of a pointer message is the same as the status field in the
  2479.       message
  2480. SeeAlso: AH=12h/BH=04h"READ"
  2481. --------Q-1512--BH10-------------------------
  2482. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2483.     AH = 12h
  2484.     BH = 10h
  2485.     BL = object
  2486.         00h handle is DWORD on top of stack
  2487.         window: return TRUE if logical cursor past end of window
  2488.         mailbox: ???
  2489.         01h returns TRUE if logical cursor past end of task's def window
  2490.         02h return ??? for task's mailbox (task's handle on top of stack)
  2491.         03h return ??? for current task's mailbox
  2492.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2493.         0Dh (DV 2.26+) check log cursor of window of parent task
  2494. Return: DWORD on top of stack is status
  2495. --------Q-1512--BH11-------------------------
  2496. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2497.     AH = 12h
  2498.     BH = 11h
  2499.     BL = window for which to move cursor
  2500.         00h window's handle is DWORD on top of stack
  2501.         01h task's default window
  2502.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2503.         0Dh (DV 2.26+) default window of parent of current task
  2504.     STACK: DWORD column
  2505.            DWORD row
  2506. --------Q-1512--BH11-------------------------
  2507. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2508.     AH = 12h
  2509.     BH = 11h
  2510.     BL = mailbox to name
  2511.         00h DWORD on top of stack is mailbox handle
  2512.         02h use given task's mailbox (task's handle on top of stack)
  2513.         03h use current task's default mailbox
  2514.     STACK: DWORD length of name
  2515.            DWORD address of name
  2516. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  2517. --------Q-1512--BX1100-----------------------
  2518. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2519.     AH = 12h
  2520.     BX = 1100h
  2521.     STACK: DWORD object handle for pointer object
  2522.            DWORD number of colums to scale pointer position to
  2523.            DWORD number of rows to scale pointer position to
  2524. SeeAlso: AH=12h/BX=1200h
  2525. --------Q-1512--BH12-------------------------
  2526. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2527.     AH = 12h
  2528.     BH = 12h
  2529.     BL = window to read from
  2530.         00h handle is DWORD on top of stack
  2531.         01h read next N chars or attributes on task's default window
  2532.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2533.         0Dh (DV 2.26+) read default window of parent of current task
  2534.     STACK: DWORD count
  2535. Return: STACK: DWORD number of bytes actually read
  2536.            DWORD address of buffer containing data
  2537. Notes:    reading starts at the current logical cursor position; the cursor is
  2538.       updated to point at the character following the last one read
  2539.     any translucent blanks (FFh) which are visible on screen are changed
  2540.       to the character which is seen through them
  2541.     the string produced by the read is placed in an input buffer which may
  2542.       be reused by the next READ or READN of a window
  2543.     window stream opcodes D8h and D9h determine whether the read returns
  2544.       characters or attributes
  2545. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2546. --------Q-1512--BH12-------------------------
  2547. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  2548.     AH = 12h
  2549.     BH = 12h
  2550.     BL = mailbox for which to retrieve name
  2551.         00h DWORD on top of stack is mailbox handle
  2552.         02h use given task's mailbox (task's handle on top of stack)
  2553.         03h use current task's default mailbox
  2554.     STACK: DWORD length of buffer for name
  2555.            DWORD pointer to buffer
  2556. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  2557. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2558. Note:    the returned name is not NUL-terminated
  2559. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  2560. --------Q-1512--BX1200-----------------------
  2561. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2562.     AH = 12h
  2563.     BX = 1200h
  2564.     STACK: DWORD object handle for pointer
  2565. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2566.            DWORD pointer pos scaled as if window were this many rows high
  2567. SeeAlso: AH=12h/BX=1100h
  2568. --------Q-1512--BH13-------------------------
  2569. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2570.     AH = 12h
  2571.     BH = 13h
  2572.     BL = window object
  2573.         00h DWORD on top of stack is handle for window to redraw
  2574.         01h redraw task's default window
  2575.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2576.         0Dh (DV 2.26+) redraw default window of parent of current task
  2577. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2578. --------Q-1512--BH13-------------------------
  2579. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  2580.     AH = 12h
  2581.     BH = 13h
  2582.     BL = mailbox from which to read
  2583.         00h DWORD on top of stack is mailbox handle
  2584.         02h use given task's mailbox (task's handle on top of stack)
  2585.         03h use current task's default mailbox
  2586.     STACK: DWORD size of buffer in bytes
  2587.            DWORD pointer to buffer
  2588. Return: STACK: DWORD number of bytes read
  2589. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2590. Notes:    this call blocks if no input is available, but will return less than
  2591.       the requested number of bytes if some (but insufficient) data is
  2592.       available
  2593.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  2594.       4 or 5 set, as common memory may be exhausted by that call when
  2595.       attempting to read the next message
  2596. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  2597. --------Q-1512--BX1300-----------------------
  2598. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2599.     AH = 12h
  2600.     BX = 1300h
  2601.     STACK: DWORD object handle for pointer
  2602.            DWORD character to use for pointer
  2603. --------Q-1512--BH14-------------------------
  2604. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2605.     AH = 12h
  2606.     BH = 14h
  2607.     BL = message modifier
  2608.         00h handle is DWORD on top of stack
  2609.         01h define user stream
  2610.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  2611.         05h intercept keystrokes from task's default KEYBOARD to a window
  2612.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2613.                  DWORD address of FAR user stream handler
  2614.            (if keyboard) DWORD address of FAR filter function
  2615.  
  2616. The keyboard filter function is called when the keyboard is in field mode.  On
  2617. entry,
  2618.     AL = character
  2619.     AH = 00h or extended ASCII code if AL = 00h
  2620.     BL = field number
  2621.     CH = cursor column
  2622.     CL = cursor row
  2623.     DL = field type modifier (sixth item in field table entry)
  2624.     DH = seventh item in field table entry
  2625.     ES:SI = window's handle
  2626.     DS:DI -> field table entry for field containing the cursor
  2627. The filter function should return
  2628.     AH = 00h use keystroke
  2629.          01h ignore keystroke
  2630.          FFh beep and ignore keystroke
  2631. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2632. --------Q-1512--BH14-------------------------
  2633. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2634.     AH = 12h
  2635.     BH = 14h
  2636.     BL = object
  2637.         00h mailbox handle is DWORD on top of stack
  2638.         02h use given task's mailbox (task's handle on top of stack)
  2639.         03h use current task's default mailbox
  2640. Note:    release exclusive access by sending CLOSE message to mailbox
  2641.     access may be requested multiple times, and requires multiple CLOSEs
  2642. SeeAlso: AH=12h/BH=0Dh
  2643. --------Q-1512--BH15-------------------------
  2644. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2645.     AH = 12h
  2646.     BH = 15h
  2647.     BL = object
  2648.         00h DWORD on top of stack
  2649.         mailbox, keyboard, or pointer only
  2650.         02h mailbox for task whose handle is on top of stack
  2651.         03h mailbox for current task
  2652.         04h keyboard for task whose handle is on top of stack
  2653.         05h keyboard for current task
  2654.     STACK: DWORD flags
  2655.         if mailbox:
  2656.             bit 0: all mail messages in common memory
  2657.             bit 1: allow write even if closed
  2658.             bit 2: don't erase messages when mailbox closed
  2659.             bit 4: (DV/X) append messages with like status and
  2660.                 sender (stream-oriented mail)
  2661.             bit 5: (DV/X) store mail in expanded memory (pool
  2662.                 grows as needed)
  2663.             bit 6: (DV/X) make mailbox into non-owned mailbox
  2664.         if keyboard:
  2665.             bit 5: exclusive input when keyboard in use for input
  2666. Return: nothing
  2667. Notes:    only available if the API level has been set to at least 2.20
  2668.     equivalent to performing SUBFROM and ADDTO calls on the object
  2669.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2670.       "READ" (see AH=12h/BX=1300h"READINTO") to retrieve messages
  2671. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2672. --------Q-1512--BH16-------------------------
  2673. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2674.     AH = 12h
  2675.     BH = 16h
  2676.     BL = object
  2677.         00h DWORD on top of stack
  2678.         mailbox, keyboard, or pointer only
  2679.         02h mailbox for task whose handle is on top of stack
  2680.         03h mailbox for current task
  2681.         04h keyboard for task whose handle is on top of stack
  2682.         05h keyboard for current task
  2683. Return: STACK: DWORD current control flags (see AH=12h/BH=15h)
  2684. Notes:    only available if the API level has been set to at least 2.20
  2685.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2686.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2687. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  2688. --------Q-1512--BH17-------------------------
  2689. INT 15 - DESQview v2.42-2.52 - BUG
  2690.     AH = 12h
  2691.     BH = 17h
  2692.     BL = object
  2693.         00h DWORD on top of stack
  2694.         mailbox, keyboard, or pointer only
  2695.         02h mailbox for task whose handle is on top of stack
  2696.         03h mailbox for current task
  2697.         04h keyboard for task whose handle is on top of stack
  2698.         05h keyboard for current task
  2699. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  2700.       keyboards, and pointers, but causes a random branch
  2701.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  2702. --------Q-1512--BH80-------------------------
  2703. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  2704.     AH = 12h
  2705.     BH = 80h
  2706. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  2707.       not pop up a "Programming Error" window, instead returning an error
  2708.       code in AL:
  2709.         00h no error
  2710.         01h invalid values
  2711.         02h alias invalid
  2712.         03h handle valid but wrong type
  2713.         04h invalid handle
  2714. SeeAlso: AH=12h/BH=00h
  2715. --------Q-1512--BH81-------------------------
  2716. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  2717.     AH = 12h
  2718.     BH = 81h
  2719. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  2720.       not pop up a "Programming Error" window, instead returning an error
  2721.       code in AL (see AH=12h/BH=80h)
  2722. SeeAlso: AH=12h/BH=01h
  2723. --------Q-1512--BH82-------------------------
  2724. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  2725.     AH = 12h
  2726.     BH = 82h
  2727. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  2728.       not pop up a "Programming Error" window, instead returning an error
  2729.       code in AL (see AH=12h/BH=80h)
  2730. SeeAlso: AH=12h/BH=02h
  2731. --------Q-1512--BH83-------------------------
  2732. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  2733.     AH = 12h
  2734.     BH = 83h
  2735. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  2736.       not pop up a "Programming Error" window, instead returning an error
  2737.       code in AL (see AH=12h/BH=80h)
  2738. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  2739. --------Q-1512--BH84-------------------------
  2740. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  2741.     AH = 12h
  2742.     BH = 84h
  2743. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  2744.       not pop up a "Programming Error" window, instead returning an error
  2745.       code in AL (see AH=12h/BH=80h)
  2746. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  2747. --------Q-1512--BH85-------------------------
  2748. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  2749.     AH = 12h
  2750.     BH = 85h
  2751. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  2752.       not pop up a "Programming Error" window, instead returning an error
  2753.       code in AL (see AH=12h/BH=80h)
  2754. SeeAlso: AH=12h/BH=05h
  2755. --------Q-1512--BH86-------------------------
  2756. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  2757.     AH = 12h
  2758.     BH = 86h
  2759. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  2760.       not pop up a "Programming Error" window, instead returning an error
  2761.       code in AL (see AH=12h/BH=80h)
  2762. SeeAlso: AH=12h/BH=06h
  2763. --------Q-1512--BH87-------------------------
  2764. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  2765.     AH = 12h
  2766.     BH = 87h
  2767. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  2768.       not pop up a "Programming Error" window, instead returning an error
  2769.       code in AL (see AH=12h/BH=80h)
  2770. SeeAlso: AH=12h/BH=07h
  2771. --------Q-1512--BH88-------------------------
  2772. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  2773.     AH = 12h
  2774.     BH = 88h
  2775. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  2776.       not pop up a "Programming Error" window, instead returning an error
  2777.       code in AL (see AH=12h/BH=80h)
  2778. SeeAlso: AH=12h/BH=08h
  2779. --------Q-1512--BH89-------------------------
  2780. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  2781.     AH = 12h
  2782.     BH = 89h
  2783. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  2784.       not pop up a "Programming Error" window, instead returning an error
  2785.       code in AL (see AH=12h/BH=80h)
  2786. SeeAlso: AH=12h/BH=09h
  2787. --------Q-1512--BH8A-------------------------
  2788. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  2789.     AH = 12h
  2790.     BH = 8Ah
  2791. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  2792.       not pop up a "Programming Error" window, instead returning an error
  2793.       code in AL (see AH=12h/BH=80h)
  2794. SeeAlso: AH=12h/BH=0Ah
  2795. --------Q-1512--BH8B-------------------------
  2796. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  2797.     AH = 12h
  2798.     BH = 8Bh
  2799. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  2800.       not pop up a "Programming Error" window, instead returning an error
  2801.       code in AL (see AH=12h/BH=80h)
  2802. SeeAlso: AH=12h/BH=0Bh
  2803. --------Q-1512--BH8C-------------------------
  2804. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  2805.     AH = 12h
  2806.     BH = 8Ch
  2807. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  2808.       not pop up a "Programming Error" window, instead returning an error
  2809.       code in AL (see AH=12h/BH=80h)
  2810. SeeAlso: AH=12h/BH=0Ch
  2811. --------Q-1512--BH8D-------------------------
  2812. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  2813.     AH = 12h
  2814.     BH = 8Dh
  2815. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  2816.       not pop up a "Programming Error" window, instead returning an error
  2817.       code in AL (see AH=12h/BH=80h)
  2818. SeeAlso: AH=12h/BH=0Dh
  2819. --------Q-1512--BH8E-------------------------
  2820. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  2821.     AH = 12h
  2822.     BH = 8Eh
  2823. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  2824.       not pop up a "Programming Error" window, instead returning an error
  2825.       code in AL (see AH=12h/BH=80h)
  2826. SeeAlso: AH=12h/BH=0Eh
  2827. --------Q-1512--BH8F-------------------------
  2828. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  2829.     AH = 12h
  2830.     BH = 8Fh
  2831. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  2832.       not pop up a "Programming Error" window, instead returning an error
  2833.       code in AL (see AH=12h/BH=80h)
  2834. SeeAlso: AH=12h/BH=0Fh
  2835. --------Q-1512--BH90-------------------------
  2836. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  2837.     AH = 12h
  2838.     BH = 90h
  2839. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  2840.       not pop up a "Programming Error" window, instead returning an error
  2841.       code in AL (see AH=12h/BH=80h)
  2842. SeeAlso: AH=12h/BH=10h
  2843. --------Q-1512--BH91-------------------------
  2844. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  2845.     AH = 12h
  2846.     BH = 91h
  2847. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  2848.       not pop up a "Programming Error" window, instead returning an error
  2849.       code in AL (see AH=12h/BH=80h)
  2850. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  2851. --------Q-1512--BH92-------------------------
  2852. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  2853.     AH = 12h
  2854.     BH = 92h
  2855. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  2856.       not pop up a "Programming Error" window, instead returning an error
  2857.       code in AL (see AH=12h/BH=80h)
  2858. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  2859. --------Q-1512--BH93-------------------------
  2860. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  2861.     AH = 12h
  2862.     BH = 93h
  2863. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  2864.       not pop up a "Programming Error" window, instead returning an error
  2865.       code in AL (see AH=12h/BH=80h)
  2866. SeeAlso: AH=12h/BH=13h
  2867. --------Q-1512--BH94-------------------------
  2868. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  2869.     AH = 12h
  2870.     BH = 94h
  2871. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  2872.       not pop up a "Programming Error" window, instead returning an error
  2873.       code in AL (see AH=12h/BH=80h)
  2874. SeeAlso: AH=12h/BH=14h
  2875. --------Q-1512--BH95-------------------------
  2876. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  2877.     AH = 12h
  2878.     BH = 95h
  2879. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  2880.       not pop up a "Programming Error" window, instead returning an error
  2881.       code in AL (see AH=12h/BH=80h)
  2882. SeeAlso: AH=12h/BH=15h
  2883. --------Q-1512--BH96-------------------------
  2884. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  2885.     AH = 12h
  2886.     BH = 96h
  2887. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  2888.       not pop up a "Programming Error" window, instead returning an error
  2889.       code in AL (see AH=12h/BH=80h)
  2890. SeeAlso: AH=12h/BH=16h
  2891. --------T-1513-------------------------------
  2892. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  2893.     AH = 13h
  2894.     STACK:    WORD    process ID
  2895. Return: AX = status (SYS_OK or SYS_ERROR)
  2896. SeeAlso: AH=12h"VMiX"
  2897. --------T-1513-------------------------------
  2898. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2899.     AH = 13h
  2900. Return: BX:AX -> task control block (see below)
  2901. SeeAlso: AH=15h"MultiDOS"
  2902.  
  2903. Format of MultiDOS Plus v4.0 task control block:
  2904. Offset    Size    Description
  2905.  00h    DWORD    pointer to next TCB
  2906.  04h  8 BYTEs    ASCIZ task name
  2907.  0Ch  2 BYTEs    ???
  2908.  0Eh    WORD    task PSP segment
  2909.  10h    WORD    abort/suspend flags
  2910.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2911.  14h    WORD    priority level (0000h-FFFEh)
  2912.  16h    WORD    time slice counter
  2913.  18h  2 BYTEs    ???
  2914.  1Ah    WORD    suspend timer value
  2915.  1Ch    WORD    stack segment
  2916.  1Eh    WORD    stack pointer
  2917.  20h    WORD    display type
  2918.  22h    WORD    display memory
  2919.  24h  2 BYTEs    ???
  2920.  26h    WORD    termination count
  2921.  28h    WORD    equipment flag for BIO10 driver
  2922.  2Ah    BYTE    background CRT mode
  2923.  2Bh    WORD    screen width in columns
  2924.  2Dh    WORD    screen size in bytes
  2925.  2Fh    WORD    segment of physical screen memory
  2926.  31h 16 BYTEs    eight cursor positions
  2927.  41h    WORD    current cursor shape
  2928.  43h    BYTE    active display page
  2929.  44h    WORD    CRT controller I/O port base
  2930.  46h  2 BYTEs    ???
  2931.  48h    WORD    foreground task flag
  2932.  4Ah  6 BYTEs    ???
  2933.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2934.  52h    DWORD    old INT 22
  2935.  56h    DWORD    old INT 23
  2936.  5Ah    DWORD    old INT 24
  2937.  5Eh    WORD    top of memory for task
  2938.  60h  4 BYTEs    ???
  2939.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2940.  66h    WORD    DTA offset
  2941.  68h  4 BYTEs    ???
  2942.  6Ch    BYTE    current ANSI.SYS attribute
  2943.  6Dh    BYTE    current ANSI.SYS column
  2944.  6Eh    BYTE    current ANSI.SYS row
  2945.  6Fh    BYTE    current ANSI.SYS display state
  2946.  70h    BYTE    maximum ANSI.SYS columns
  2947.  71h    BYTE    current ANSI.SYS page
  2948.  72h    WORD    saved ANSI.SYS cursor position
  2949.  74h    BYTE    ANSI.SYS parameter buffer index
  2950.  75h    BYTE    current ANSI.SYS screen mode
  2951.  76h    BYTE    ANSI.SYS wrap flag
  2952.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2953.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2954.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2955.  85h  3 BYTEs    ???
  2956.  88h 16 BYTEs    request header for DOS driver calls
  2957.  98h 14 BYTEs    ???
  2958.  A6h    WORD    segment of EMS map if EMS task
  2959.  A8h    WORD    flag: task makes EMS calls
  2960.  AAh    WORD    EMS handle for task
  2961.  ACh    WORD    keyboard shift state
  2962.  AEh 12 BYTEs    ???
  2963.  BAh    WORD    TCB of parent if child task
  2964.  BCh    WORD    termination code
  2965.  BEh    WORD    COM port number
  2966.  C0h  4 BYTEs    ???
  2967.  C4h    WORD    current IRQ number
  2968.  C6h  2 BYTEs    ???
  2969.  C8h    WORD    miscellaneous flag word
  2970.  CAh  2 BYTEs    ???
  2971.  CCh    DWORD    old INT 10
  2972.  D0h    WORD    EMS alternate map set number
  2973.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2974. --------T-1514-------------------------------
  2975. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  2976.     AH = 14h
  2977.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  2978.         WORD    bottom right corner of window (high = row, low = col)
  2979. Return: AX = status (SYS_OK)
  2980. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  2981. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  2982. --------T-1514-------------------------------
  2983. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2984.     AH = 14h
  2985. Return: AX = current state
  2986.         0000h MultiDOS Plus command prompt is background task
  2987.         0001h command prompt is foreground task
  2988. SeeAlso: AH=0Bh"MultiDOS"
  2989. --------T-1515-------------------------------
  2990. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  2991.     AH = 15h
  2992.     STACK:    DWORD    pointer to ASCIZ banner message for top of screen
  2993. Return: AX = status (SYS_OK)
  2994. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  2995. --------T-1515-------------------------------
  2996. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2997.     AH = 15h
  2998. Return: BX:AX -> system block (see below)
  2999. SeeAlso: AH=13h"MultiDOS"
  3000.  
  3001. Format of MultiDOS Plus 4.0 system block:
  3002. Offset    Size    Description
  3003.  00h    WORD    segment of system control block
  3004.  02h    WORD    redirection flag set by /NOREDIRECT
  3005.  04h    WORD    no-INT 10 flag set by /NO10
  3006.  06h    DWORD    old INT 10
  3007.  0Ah    DWORD    new INT 10
  3008.  0Eh    DWORD    pointer to WORD with current TCB offset (see AH=13h)
  3009.  12h    DWORD    pointer to WORD with idle task TCB offset
  3010.  16h    DWORD    pointer to WORD with foreground TCB offset
  3011.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset
  3012.  1Eh    WORD    Task Control Block size
  3013.  20h    WORD    number of TCBs
  3014.  22h    WORD    flag: EMS present
  3015.  24h    WORD    EMS page frame base segment
  3016.  26h    WORD    16K pages in EMS page frame
  3017.  28h    WORD    base segment for conventional memory tasks
  3018.  2Ah    WORD    conventional memory size in paragraphs
  3019.  2Ch    DWORD    pointer to list of queue pointers
  3020. --------T-1516-------------------------------
  3021. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  3022.     AH = 16h
  3023.     STACK:    DWORD    pointer to I/O Request Packet
  3024.         WORD    top left corner of window (high byte = row, low = col)
  3025.         WORD    bottom right corner of window (high = row, low = col)
  3026. Return: AX = status (SYS_OK or SYS_ERROR)
  3027. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  3028. --------T-1516-------------------------------
  3029. INT 15 - MultiDOS Plus - INITIALIZATION
  3030.     AH = 16h
  3031. Note:    used internally during initialization; any other calls will cause
  3032.       unpredicatable results
  3033. --------T-1517-------------------------------
  3034. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  3035.     AH = 17h
  3036. Return: AH = foreground color
  3037.     AL = background color
  3038. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  3039. --------T-1517-------------------------------
  3040. INT 15 - MultiDOS Plus - MAP IRQ
  3041.     AH = 17h
  3042.     AL = IRQ to map (01h-0Fh)
  3043.     BX = offset of task control block (see AH=13h) to associate with IRQ
  3044. Return: AX = status
  3045.         0000h successful
  3046.         other invalid IRQ
  3047. Note:    the EMS map of the specified TCB is associated with the given interrupt
  3048. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  3049. --------T-1518-------------------------------
  3050. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  3051.     AH = 18h
  3052.     STACK:    WORD    new background/foreground colors
  3053.             bits 3-0: foreground
  3054.             bits 7-4: background
  3055.             bits 15-8: unused
  3056. Return: AX = color
  3057. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  3058. --------T-1518-------------------------------
  3059. INT 15 - MultiDOS Plus - UNMAP IRQ
  3060.     AH = 18h
  3061.     AL = IRQ to unmap (01h-0Fh)
  3062. Return: AX = status
  3063.         0000h successful
  3064.         0001h invalid IRQ
  3065. Note:    results are unpredictable if the IRQ has not been mapped
  3066. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  3067. --------T-1519-------------------------------
  3068. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  3069.     AH = 19h
  3070.     STACK:    WORD    new background/foreground colors
  3071.             bits 3-0: foreground
  3072.             bits 7-4: background
  3073.             bits 15-8: unused
  3074. Return: AX = color
  3075. SeeAlso: AH=18h"VMiX"
  3076. --------T-1519-------------------------------
  3077. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  3078.     AH = 19h
  3079. Return: AX destroyed
  3080. Note:    for MultiDOS internal use only
  3081. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  3082. --------T-151A-------------------------------
  3083. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  3084.     AH = 1Ah
  3085.     STACK:    WORD    interrupt number
  3086.         DWORD    pointer to register structure
  3087. Return: AX = returned flags
  3088. --------T-151A-------------------------------
  3089. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  3090.     AH = 1Ah
  3091.     DS:SI -> 8-byte name
  3092. Return: AL = status
  3093.         00h successful
  3094.         AH = semaphore number (20h-3Fh)
  3095.         04h out of string space
  3096. Notes:    all eight bytes of the name are significant
  3097.     if the name does not already exist, it is added to the name table and
  3098.       associated with a free semaphore number
  3099.     names cannot be destroyed
  3100. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  3101. --------T-151B-------------------------------
  3102. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  3103.     AH = 1Bh
  3104.     STACK:    DWORD    source address
  3105.         DWORD    destination address
  3106.         WORD    number of words to move
  3107. Return: nothing
  3108. --------T-151B-------------------------------
  3109. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  3110.     AH = 1Bh
  3111.     DS:SI -> 8-byte name
  3112. Return: AH = status
  3113.         00h successful
  3114.         02h invalid semaphore number
  3115.         03h caller already owns semaphore
  3116.         04h out of string space
  3117. Notes:    (see AH=01h"MultiDOS")
  3118.     equivalent to AH=1Ah followed by AH=01h
  3119. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  3120. --------T-151C-------------------------------
  3121. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  3122.     AH = 1Ch
  3123.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  3124.         DWORD    pointer to object bitmap
  3125.         WORD    object width in pixels
  3126.         WORD    object height in pixels
  3127. Return: nothing
  3128. SeeAlso: AH=1Dh"VMiX"
  3129. --------T-151C-------------------------------
  3130. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  3131.     AH = 1Ch
  3132.     DS:SI -> 8-byte name
  3133. Return: AH = status
  3134.         00h successful
  3135.         01h not semaphore owner
  3136.         02h invalid semaphore number
  3137.         04h out of string space
  3138. Notes:    (see AH=02h"MultiDOS")
  3139.     equivalent to AH=1Ah followed by AH=02h
  3140. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  3141. --------T-151D-------------------------------
  3142. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  3143.     AH = 1Dh
  3144. Return: AX = current font number (00h-03h)
  3145. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  3146. --------T-151D-------------------------------
  3147. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  3148.     AH = 1Dh
  3149.     DS:SI -> 8-byte name
  3150. Return; AH = status
  3151.         00h semaphore not in use
  3152.         01h semaphore owned by another task
  3153.         02h invalid semaphore number
  3154.         03h caller owns semaphore
  3155.         04h out of string space
  3156. Notes:    (see AH=10h"MultiDOS")
  3157.     equivalent to AH=1Ah followed by AH=10h
  3158. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  3159. --------T-151E-------------------------------
  3160. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  3161.     AH = 1Eh
  3162.     STACK: WORD new font number (00h-03h)
  3163. Return: AX = current font number (00h-03h)
  3164. SeeAlso: AH=1Dh"VMiX"
  3165. --------T-151E00-----------------------------
  3166. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  3167.     AX = 1E00h
  3168.     DX = event/trigger number (00h-3Fh)
  3169. Return: AH = status
  3170.         00h successful
  3171. SeeAlso: AX=1E01h,AX=1E02h
  3172. --------T-151E01-----------------------------
  3173. INT 15 - MultiDOS Plus - TRIGGER EVENT
  3174.     AX = 1E01h
  3175.     DX = event/trigger number (00h-3Fh)
  3176. Return: AH = status
  3177.         00h successful
  3178.         01h invalid event/trigger number
  3179. Notes:    schedules any task waiting for event; if no task is waiting, the event
  3180.       counter is incremented (and will roll over if it was 65535)
  3181.     may be invoked by interrupt handler
  3182. SeeAlso: AX=1E00h,AX=1E02h
  3183. --------T-151E02-----------------------------
  3184. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  3185.     AX = 1E02h
  3186.     DX = event/trigger number (00h-3Fh)
  3187. Return: AH = status
  3188.         00h successful
  3189.         01h invalid event/trigger number
  3190. Note:    if the event counter is zero, the task is suspended until the event is
  3191.       triggered with AX=1E01h; else, the counter is decremented and the
  3192.       call returns immediately
  3193. SeeAlso: AX=1E00h,AX=1E01h
  3194. --------T-151E08-----------------------------
  3195. INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
  3196.     AX = 1E08h
  3197.     DX:BX -> context save handler
  3198.     DX:CX -> context restore handler
  3199. Note:    handlers may be removed by setting addresses to 0000h:0000h
  3200.  
  3201. Handlers are called with:
  3202.     ES:BX -> task's TCB
  3203. Return: all registers preserved
  3204. --------T-151F-------------------------------
  3205. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  3206.     AH = 1Fh
  3207.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  3208.         WORD    bottom right corner of window
  3209. Return: AX = status (SYS_OK)
  3210. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  3211. --------T-151F-------------------------------
  3212. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  3213.     AH = 1Fh
  3214. Return: BX = first segment of conventional memory
  3215.     DX = first segment of EMS swap frame into which MultiDOS will load
  3216.         programs
  3217. --------T-1520-------------------------------
  3218. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  3219.     AH = 20h
  3220. Return: AX = current state
  3221.         0000h multitasking enabled
  3222.         other TCB of task that disabled multitasking
  3223. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  3224. --------c-152000-----------------------------
  3225. INT 15 U - DOS 3+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  3226.     AX = 2000h
  3227. Desc:    stop setting user flag on entry to PRINT critical region
  3228. Note:    also supported by PC Network v1.00 RECEIVER.COM
  3229. SeeAlso: AX=2001h
  3230. --------c-152001-----------------------------
  3231. INT 15 U - DOS 3+ PRINT.COM - SET CRITICAL REGION FLAG
  3232.     AX = 2001h
  3233.     ES:BX -> byte which is to be incremented while in a DOS call
  3234. Desc:    specify a user flag which PRINT should set to let an interested
  3235.       application know it is in a critical region
  3236. Note:    also supported by PC Network v1.00 RECEIVER.COM
  3237. SeeAlso: AX=2000h
  3238. --------O-152010-----------------------------
  3239. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  3240.     AX = 2010h
  3241.     ???
  3242. Return: ???
  3243. SeeAlso: AX=2011h
  3244. --------O-152011-----------------------------
  3245. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  3246.     AX = 2011h
  3247.     ???
  3248. Return: ???
  3249. SeeAlso: AX=2010h
  3250. --------B-1521-------------------------------
  3251. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  3252.     AH = 21h
  3253.     AL = subfunction
  3254.         00h read POST log
  3255.         01h write POST log
  3256.         BH = device ID
  3257.         BL = error code
  3258. Return: CF set on error
  3259.     AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
  3260.     if function 00h:
  3261.        BX = number of error codes stored
  3262.        ES:DI -> error log
  3263. Note:    the log is a series of words, the first byte of which identifies the
  3264.       error code and the second the device.
  3265. --------B-1522-------------------------------
  3266. INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
  3267.     AH = 22h
  3268. Return: CF set on error
  3269.         AH = status (86h if function not supported)
  3270.     CF clear on success
  3271.         AH = 00h
  3272.         ES:BX -> ROM BASIC
  3273. Note:    if this function is not supported, ROM BASIC is at F600h:0000h
  3274. SeeAlso: INT 86"BASIC",INT F0"BASIC"
  3275. --------b-152400-----------------------------
  3276. INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
  3277.     AX = 2400h
  3278. Return: CF clear if successful
  3279.         AH = 00h
  3280.     CF set on error
  3281.         AH = status
  3282.         01h keyboard controller is in secure mode
  3283.         86h function not supported
  3284. Note:    also supported by Qualitas 386MAX v6.01+
  3285. SeeAlso: AX=2401h,AX=2402h,AX=2403h
  3286. --------b-152401-----------------------------
  3287. INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
  3288.     AX = 2401h
  3289. Return: CF clear if successful
  3290.         AH = 00h
  3291.     CF set on error
  3292.         AH = status
  3293.         01h keyboard controller is in secure mode
  3294.         86h function not supported
  3295. Note:    also supported by Qualitas 386MAX v6.01+
  3296. SeeAlso: AX=2400h,AX=2402h
  3297. --------b-152402-----------------------------
  3298. INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
  3299.     AX = 2402h
  3300. Return: CF clear if successful
  3301.         AH = 00h
  3302.         AL = current state (00h disabled, 01h enabled)
  3303.     CF set on error
  3304.         AH = status
  3305.         01h keyboard controller is in secure mode
  3306.         86h function not supported
  3307. Note:    also supported by Qualitas 386MAX v6.01+
  3308. SeeAlso: AX=2400h,AX=2401h
  3309. --------b-152403-----------------------------
  3310. INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
  3311.     AX = 2403h
  3312. Return: CF clear if successful
  3313.         AH = 00h
  3314.         BX = status of A20 gate support
  3315.         bit 0: supported with bit 1 of I/O port 92h
  3316.         bit 1: supported on keyboard controller
  3317.         bit 15: additional data is available (location not yet defined)
  3318.     CF set on error
  3319.         AH = status
  3320.         01h keyboard controller is in secure mode
  3321.         86h function not supported
  3322. Note:    also supported by Qualitas 386MAX v6.01+
  3323. SeeAlso: AX=2402h
  3324. --------B-1540-------------------------------
  3325. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  3326.     AH = 40h
  3327.     AL = subfunction
  3328.         00h get system profile in CX and BX
  3329.         01h set system profile from CX and BX
  3330.         02h get internal modem profile in BX
  3331.         03h set internal modem profile from BX
  3332. Return: CF clear if successful
  3333.         AH = 00h
  3334.     CF set on error
  3335.         AH = status (80h = profile execution failed)
  3336. --------V-154000-----------------------------
  3337. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  3338.     AX = 4000h
  3339. Return: AX = 4000h
  3340.     CL = 00h timeout disabled
  3341.        else timeout in minutes
  3342. SeeAlso: AX=4001h,AX=4600h
  3343. --------V-154001CL00-------------------------
  3344. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  3345.     AX = 4001h
  3346.     CL = 00h timeout disabled
  3347.        else     timeout in minutes
  3348. Return: AL = 00h timeout modified
  3349.          01h timeout cannot be modified
  3350.          40h timeout cannot be modified
  3351.     CL = 00h timeout disabled
  3352.        else timeout in minutes
  3353. SeeAlso: AX=4000h,AX=4601h
  3354. --------B-1541-------------------------------
  3355. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
  3356.     AH = 41h
  3357.     AL = condition type
  3358.         bits 0-2: condition to wait for
  3359.              0 any external event
  3360.              1 compare and return if equal
  3361.              2 compare and return if not equal
  3362.              3 test and return if not zero
  3363.              4 test and return if zero
  3364.         bit 3:    reserved
  3365.         bit 4:    1=port address, 0=user byte
  3366.         bits 5-7: reserved
  3367.     BH = condition compare or mask value
  3368.     BL = timeout value times 55 milliseconds
  3369.         00h means no timeout
  3370.     DX = I/O port address if AL bit 4 set
  3371.     ES:DI -> user byte if AL bit 4 clear
  3372. Note:    call AH=C0h and examine bit 3 of feature byte 1 to determine whether
  3373.       this function is supported
  3374. SeeAlso: AH=83h,AH=86h,AH=C0h
  3375. --------B-1542-------------------------------
  3376. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  3377.     AH = 42h
  3378.     AL = suspend type
  3379.         00h to use system profile
  3380.         01h to force suspend regardless of system profile
  3381. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  3382.       power-up, execution will resume following the instruction calling
  3383.       this function
  3384. SeeAlso: AH=44h
  3385. --------b-154280-----------------------------
  3386. INT 15 - Compaq SLT/286 - ENTER STANDBY
  3387.     AX = 4280h
  3388. Return: AH = 42h
  3389.     CF clear if successful
  3390.     CF set if unable to enter standby
  3391. SeeAlso: AX=4600h,AX=5307h/BX=0001h/CX=0001h
  3392. --------B-1543-------------------------------
  3393. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  3394.     AH = 43h
  3395. Return: AL = status bits (see below)
  3396.  
  3397. Bitfields for Convertible system status:
  3398.  bit 0    LCD detached
  3399.  bit 1    reserved
  3400.  bit 2    RS232/parallel adapter powered on
  3401.  bit 3    internal modem powered on
  3402.  bit 4    power activated by alarm
  3403.  bit 5    standby power lost
  3404.  bit 6    external power in use
  3405.  bit 7    power low
  3406. --------B-1544-------------------------------
  3407. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  3408.     AH = 44h
  3409.     AL = new modem power state (00h power off, 01h power on)
  3410. SeeAlso: AH=42h
  3411. --------b-154600-----------------------------
  3412. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  3413.     AX = 4600h
  3414. Return: AH = modem configuration information
  3415.         bit 0 powerup state
  3416.             0 off
  3417.             1 on
  3418.         1 modem installed
  3419.         2 IRQ line assignment
  3420.             0 IRQ 4
  3421.             1 IRQ 3
  3422.         3 COM port assignment
  3423.             0 = COM 2
  3424.             1 = COM 1
  3425.         4 modem state
  3426.             0 not assigned
  3427.             1 assigned
  3428.         5 modem is on
  3429.     AL = power conservation status information
  3430.         bit 0  power source (0 internal, 1 external)
  3431.            1-2 low battery state
  3432.             00 no low battery condition
  3433.             01 low battery 1
  3434.             10 reserved
  3435.             11 low battery 2
  3436.            3-4 power conservation mode
  3437.             00 automatic
  3438.             01 on
  3439.             10 off
  3440.             11 reserved
  3441.     BH = default system inactivity timeout (1-21 minutes)
  3442.     BL = current system inactivity timeout (1-21 minutes)
  3443.     CH = default video display inactivity timeout (1-63 minutes)
  3444.     CL = current video display inactivity timeout (1-63 minutes)
  3445.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  3446.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3447. SeeAlso: AX=4280h,AX=4601h,INT 77
  3448. --------b-154601-----------------------------
  3449. INT 15 - Compaq SLT/286 - Modify Power Conservation/Modem Configuration
  3450.     AX = 4601h
  3451.     BL = system inactivity timeout (1-21 minutes)
  3452.        = FFh do not change
  3453.     CL = video display inactivity timeout (1-63 minutes)
  3454.        = FFh do not change
  3455.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3456.        = FFh do not change
  3457.     DH = 00h turn modem OFF
  3458.        = 01h turn modem ON
  3459.        = FFh do not change modem state
  3460. Return: CF clear if successful
  3461.         AH = 00h
  3462.         BL = current system inactivity timeout (1-21 minutes)
  3463.         CL = current video display inactivity timeout (1-63 minutes)
  3464.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3465.         DH = FFh modem state unchanged
  3466.            = 00h modem turned OFF
  3467.            = 01h modem turned ON
  3468.     CF set on error
  3469.         AH = 01h input is out of range
  3470.            = 02h - No modem present
  3471. SeeAlso: AX=4600h,INT 77
  3472. --------D-154900-----------------------------
  3473. INT 15 - Far East MS-DOS - GET DOS TYPE
  3474.     AX = 4900h
  3475. Return: CF clear if successful
  3476.         AH = 00h
  3477.         BL = type of DOS running
  3478.         00h DOS/V
  3479.         01h DOS/J or DOS/K (early IBM Japan versions of MS-DOS)
  3480.     CF set on error
  3481.         AH = 86h (function not supported)
  3482. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  3483. SeeAlso: INT 21/AH=30h
  3484. --------b-154DD4-----------------------------
  3485. INT 15 - HP 95LX - INSTALLATION CHECK
  3486.     AX = 4DD4h
  3487. Return: BX = 4850h ("HP") if HP 95LX
  3488.         CX = ??? (0101h)
  3489.         DL = ??? (00h)
  3490. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  3491. SeeAlso: INT 61"HP 95LX"
  3492. --------b-154E-------------------------------
  3493. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  3494.     AH = 4Eh
  3495.     AL = light sleep
  3496.         00h disabled
  3497.         01h enabled
  3498. Note:    when light sleep is disabled, the system will continue running at full
  3499.       speed; when enabled, it may automatically slow to conserve batteries
  3500. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  3501. --------B-154F-------------------------------
  3502. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  3503.     AH = 4Fh
  3504.     AL = hardware scan code
  3505.     CF set
  3506. Return: CF set
  3507.        AL = hardware scan code
  3508.     CF clear
  3509.        scan code should be ignored
  3510. Note:    called by INT 09 handler to translate scan codes; the INT 09 code does
  3511.       not examine the scan code it reads from the keyboard until after
  3512.       this function returns.  This permits software to rearrange the
  3513.       keyboard; for example, swapping the CapsLock and Control keys, or
  3514.       turning the right Shift key into Enter.
  3515. SeeAlso: INT 09,INT 15/AH=C0h
  3516. --------T-1550-------------------------------
  3517. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  3518.     AH = 50h
  3519.     BX = segment of page directory table
  3520.     CX = page number of page table
  3521. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  3522. --------T-1551-------------------------------
  3523. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  3524.     AH = 51h
  3525.     STACK:    DWORD    selector:offset of function
  3526. Return: registers as returned by function
  3527. Note:    executes function with privilege level 0 (highest privilege)
  3528. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  3529. --------B-155101-----------------------------
  3530. INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
  3531.     AX = 5101h
  3532. Return: CF set if successful
  3533.         AH = 00h
  3534.         AL = current configuration number
  3535.         00h system unit only
  3536.         FFh configuration not recognized
  3537.         BX = status flag
  3538.         bits 0-14: reserved
  3539.         bit 15: additional data is available (location TBD)
  3540.     CF clear on error
  3541.         AH = status
  3542.         01h expansion unit is not present
  3543.         86h function not supported
  3544. Note:    CF convention is the reverse of the standard convention for this
  3545.       interrupt.  (Perhaps a typo in the IBM BIOS Tech Ref?)
  3546. --------T-1552-------------------------------
  3547. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  3548.     AH = 52h
  3549. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  3550. --------p-155300BX0000-----------------------
  3551. INT 15 - Advanced Power Management Specification - INSTALLATION CHECK
  3552.     AX = 5300h
  3553.     BX = 0000h (device ID of system BIOS)
  3554. Return: CF clear if successful
  3555.         AH = major version (BCD)
  3556.         AL = minor version (BCD)
  3557.         BX = 504Dh ("PM")
  3558.         CX = flags
  3559.         bit 0: 16-bit protected mode interface supported
  3560.         bit 1: 32-bit protected mode interface supported
  3561.         bit 2: CPU idle call reduces processor speed
  3562.         bit 3: BIOS power management disabled
  3563.         bits 4-7 reserved
  3564.     CF set on error
  3565.         AH = error code (86h) (see below)
  3566.  
  3567. Values for error code:
  3568.  01h    power management functionality disabled
  3569.  02h    interface connection already in effect
  3570.  03h    interface not connected
  3571.  04h    real-mode interface not connected
  3572.  05h    16-bit protected-mode interface already connected
  3573.  06h    16-bit protected-mode interface not supported
  3574.  07h    32-bit protected-mode interface already connected
  3575.  08h    32-bit protected-mode interface not supported
  3576.  09h    unrecognized device ID
  3577.  0Ah    invalid parameter value in CX
  3578.  0Bh-1Fh reserved for other interface and general errors
  3579.  20h-3Fh reserved for CPU errors
  3580.  40h-5Fh reserved for device errors
  3581.  60h    can't enter requested state
  3582.  61h-7Fh reserved for other system errors
  3583.  80h    no power management events pending
  3584.  81h-85h reserved for other power management event errors
  3585.  86h    APM not present
  3586.  87h-9Fh reserved for other power management event errors
  3587. --------p-155301BX0000-----------------------
  3588. INT 15 - Advanced Power Management Specification - CONNECT REAL-MODE INTERFACE
  3589.     AX = 5301h
  3590.     BX = 0000h (device ID of system BIOS)
  3591. Return: CF clear if successful
  3592.     CF set on error
  3593.         AH = error code (02h,09h) (see AX=5300h)
  3594. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  3595. --------p-155302BX0000-----------------------
  3596. INT 15 R - Advanced Power Management Spec - CONNECT 16-BIT PROTMODE INTERFACE
  3597.     AX = 5302h
  3598.     BX = 0000h (device ID of system BIOS)
  3599. Return: CF clear if successful
  3600.         AX = real-mode segment base address of protected-mode 16-bit code
  3601.         segment
  3602.         BX = offset of entry point
  3603.         CX = real-mode segment base address of protected-mode 16-bit data
  3604.         segment
  3605.     CF set on error
  3606.         AH = error code (05h,06h,09h) (see AX=5300h)
  3607. Notes:    the caller must initialize two consecutive descriptors with the
  3608.       returned segment base addresses; these descriptors must be valid
  3609.       whenever the protected-mode interface is called, and will have
  3610.       their limits arbitrarily set to 64K.
  3611.     the protected mode interface is invoked by making a far call with the
  3612.       same register values as for INT 15; it must be invoked while CPL=0,
  3613.       the code segment descriptor must have a DPL of 0, the stack must be
  3614.       in a 16-bit segment and have enough room for BIOS use and possible
  3615.       interrupts, and the current I/O permission bit map must allow access
  3616.       to the I/O ports used for power management.
  3617.     functions 00h-03h are not available from protected mode
  3618. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  3619. --------p-155303BX0000-----------------------
  3620. INT 15 - Advanced Power Management Spec - CONNECT 32-BIT PROTMODE INTERFACE
  3621.     AX = 5303h
  3622.     BX = 0000h (device ID of system BIOS)
  3623. Return: CF clear if successful
  3624.         AX = real-mode segment base address of protected-mode 32-bit code
  3625.         segment
  3626.         EBX = offset of entry point
  3627.         CX = real-mode segment base address of protected-mode 16-bit code
  3628.         segment
  3629.         DX = real-mode segment base address of protected-mode 16-bit data
  3630.         segment
  3631.     CF set on error
  3632.         AH = error code (07h,08h,09h) (see AX=5300h)
  3633. Notes:    the caller must initialize three consecutive descriptors with the
  3634.       returned segment base addresses for 32-bit code, 16-bit code, and
  3635.       16-bit data, respectively; these descriptors must be valid whenever
  3636.       the protected-mode interface is called, and will have their limits
  3637.       arbitrarily set to 64K.
  3638.     the protected mode interface is invoked by making a far call to the
  3639.       32-bit code segment with the same register values as for INT 15; it
  3640.       must be invoked while CPL=0, the code segment descriptor must have a
  3641.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  3642.       for BIOS use and possible interrupts, and the current I/O permission
  3643.       bit map must allow access to the I/O ports used for power management.
  3644.     functions 00h-03h are not available from protected mode
  3645. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  3646. --------p-155304BX0000-----------------------
  3647. INT 15 - Advanced Power Management Specification - DISCONNECT INTERFACE
  3648.     AX = 5304h
  3649.     BX = 0000h (device ID of system BIOS)
  3650. Return: CF clear if successful
  3651.     CF set on error
  3652.         AH = error code (03h,09h) (see AX=5300h)
  3653. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  3654. --------p-155305-----------------------------
  3655. INT 15 - Advanced Power Management Specification - CPU IDLE
  3656.     AX = 5305h
  3657. Return: after system leaves idle state
  3658.     CF clear
  3659. Notes:    call when the system is idle and should be suspended until the next
  3660.       system event or interrupt
  3661.     should not be called from within a hardware interrupt handler to avoid
  3662.       reentrance problems
  3663.     if an interrupt causes the system to resume normal processing, the
  3664.       interrupt may or may not have been handled when the BIOS returns
  3665.       from this call; thus, the caller should allow interrupts on return
  3666.     interrupt handlers may not retain control if the BIOS allows
  3667.       interrupts while in idle mode even if they are able to determine
  3668.       that they were called from idle mode
  3669.     the caller should issue this call continuously in a loop until it needs
  3670.       to perform some processing of its own
  3671. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  3672. --------p-155306-----------------------------
  3673. INT 15 - Advanced Power Management Specification - CPU BUSY
  3674.     AX = 5306h
  3675. Return: CF clear
  3676. Notes:    called to ensure that the system runs at full speed even on systems
  3677.       where the BIOS is unable to recognize increased activity (especially
  3678.       if interrupts are hooked by other programs and not chained to the
  3679.       BIOS)
  3680.     this call may be made even when the system is already running at full
  3681.       speed, but it will create unnecessary overhead
  3682.     should not be called from within a hardware interrupt handler to avoid
  3683.       reentrance problems
  3684. SeeAlso: AX=5305h
  3685. --------p-155307-----------------------------
  3686. INT 15 - Advanced Power Management Specification - SET POWER STATE
  3687.     AX = 5307h
  3688.     BX = device ID (see below)
  3689.     CX = system state ID
  3690.         0000h ready (not supported for device ID 0001h)
  3691.         0001h stand-by
  3692.         0002h suspend
  3693.         0003h off (not supported for device ID 0001h)
  3694.         0004h-FFFFh reserved
  3695. Return: CF clear if successful
  3696.     CF set on error
  3697.         AH = error code (01h,09h,0Ah,60h) (see AX=5300h)
  3698. Note:    should not be called from within a hardware interrupt handler to avoid
  3699.       reentrance problems
  3700.  
  3701. Values for device IDs:
  3702.  0000h    system BIOS
  3703.  0001h    all devices for which the system BIOS manages power
  3704.  01xxh    display (01FFh for all attached display devices)
  3705.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  3706.  03xxh    parallel ports (03FFh for all attached parallel ports)
  3707.  04xxh    serial ports (04FFh for all attached serial ports)
  3708.  0500h-FFFFh reserved
  3709. --------p-155307BX0001-----------------------
  3710. INT 15 - Advanced Power Management Specification - SYSTEM STAND-BY
  3711.     AX = 5307h
  3712.     BX = 0001h
  3713.     CX = 0001h
  3714. Return: CF clear
  3715. Notes:    puts the entire system into stand-by mode; normally called in response
  3716.       to a System Stand-by Request notification after any necessary
  3717.       processing, but may also be invoked at the caller's discretion
  3718.     should not be called from within a hardware interrupt handler to avoid
  3719.       reentrance problems
  3720.     the stand-by state is typically exited on an interrupt
  3721. SeeAlso: AX=4280h,AX=5307h/BX=0001h/CX=0002h,AX=530Bh
  3722. --------p-155307BX0001-----------------------
  3723. INT 15 - Advanced Power Management Specification - SUSPEND SYSTEM
  3724.     AX = 5307h
  3725.     BX = 0001h
  3726.     CX = 0002h
  3727. Return: after system is resumed
  3728.     CF clear
  3729. Notes:    puts the entire system into a low-power suspended state; normally
  3730.       called in response to a Suspend System Request notification after
  3731.       any necessary processing, but may also be invoked at the caller's
  3732.       discretion
  3733.     should not be called from within a hardware interrupt handler to avoid
  3734.       reentrance problems
  3735.     the caller may need to update its date and time values because the
  3736.       system could have been suspended for a long period of time
  3737. SeeAlso: AX=5307h/BX=0001h/CX=0001h,AX=530Bh
  3738. --------p-155308BXFFFF-----------------------
  3739. INT 15 - Advanced Power Management Spec - ENABLE/DISABLE POWER MANAGEMENT
  3740.     AX = 5308h
  3741.     BX = FFFFh
  3742.     CX = new state
  3743.         0000h disabled
  3744.         0001h enabled
  3745. Return: CF clear if successful
  3746.     CF set on error
  3747.         AH = error code (01h,09h,0Ah) (see AX=5300h)
  3748. Notes:    when power management is disabled, the system BIOS will not
  3749.       automatically power down devices, enter stand-by or suspended mode,
  3750.       or perform any power-saving actions in response to AX=5305h calls
  3751.     should not be called from within a hardware interrupt handler to avoid
  3752.       reentrance problems
  3753. SeeAlso: AX=5309h
  3754. --------p-155309BXFFFF-----------------------
  3755. INT 15 - Advanced Power Management Specification - RESTORE POWER-ON DEFAULTS
  3756.     AX = 5309h
  3757.     BX = FFFFh
  3758. Return: CF clear if successful
  3759.     CF set on error
  3760.         AH = error code (09h) (see AX=5300h)
  3761. Note:    should not be called from within a hardware interrupt handler to avoid
  3762.       reentrance problems
  3763. SeeAlso: AX=5308h
  3764. --------p-15530ABX0001-----------------------
  3765. INT 15 - Advanced Power Management Specification - GET POWER STATUS
  3766.     AX = 530Ah
  3767.     BX = 0001h
  3768. Return: CF clear if successful
  3769.         BH = AC line status
  3770.         00h off-line
  3771.         01h on-line
  3772.         FFh unknown
  3773.         other reserved
  3774.         BL = battery status
  3775.         00h high
  3776.         01h low
  3777.         02h critical
  3778.         03h charging
  3779.         FFh unknown
  3780.         other reserved
  3781.         CL = remaining battery life
  3782.         00h-64h (0-100) percentage of full charge
  3783.         FFh unknown
  3784.     CF set on error
  3785.         AH = error code (09h) (see AX=5300h)
  3786. Note:    should not be called from within a hardware interrupt handler to avoid
  3787.       reentrance problems
  3788. --------p-15530B-----------------------------
  3789. INT 15 - Advanced Power Management Specification - GET POWER MANAGEMENT EVENT
  3790.     AX = 530Bh
  3791. Return: CF clear if successful
  3792.         BX = event code
  3793.         0001h system stand-by request
  3794.         0002h system suspend request
  3795.         0003h normal resume system notification
  3796.         0004h critical resume system notification
  3797.         0005h battery low notification
  3798.     CF set on error
  3799.         AH = error code (03h,80h) (see AX=5300h)
  3800. Notes:    although power management events are often asynchronous, notification
  3801.       will not be made until polled via this call to permit software to
  3802.       only receive event notification when it is prepared to process
  3803.       power management events; since these events are not very time-
  3804.       critical, it should be sufficient to poll once or twice per second
  3805.     the critical resume notification is made after the system resumes
  3806.       from an emergency suspension; normally, the system BIOS only notifies
  3807.       its partner that it wishes to suspend and relies on the partner to
  3808.       actually request the suspension, but no notification is made on an
  3809.       emergency suspension
  3810.     should not be called from within a hardware interrupt handler to avoid
  3811.       reentrance problems
  3812. SeeAlso: AX=5307h,AX=5307h/BX=0001h/CX=0001h,AX=5307h/BX=0001h/CX=0002h
  3813. --------T-155400-----------------------------
  3814. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  3815.     AX = 5400h
  3816.     ES:BX -> device information tables
  3817.     DI:DX -> dispatcher entry point
  3818. Note:    called by OmniView to notify programs loaded before OmniView of state
  3819.       changes inside OmniView
  3820. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  3821. --------T-155401-----------------------------
  3822. INT 15 C - Omniview Multitasker - PROCESS CREATION
  3823.     AX = 5401h
  3824.     ES:BX = process handle
  3825. Note:    called by OmniView to notify programs loaded before OmniView of state
  3826.       changes inside OmniView
  3827. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  3828. --------T-155402-----------------------------
  3829. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  3830.     AX = 5402h
  3831.     ES:DX = process handle
  3832. Note:    called by OmniView to notify programs loaded before OmniView of state
  3833.       changes inside OmniView
  3834. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  3835. --------T-155403-----------------------------
  3836. INT 15 C - Omniview Multitasker - SAVE
  3837.     AX = 5403h
  3838.     ES:DX = process swapping out
  3839. Note:    called by OmniView to notify programs loaded before OmniView of state
  3840.       changes inside OmniView
  3841. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  3842. --------T-155404-----------------------------
  3843. INT 15 C - Omniview Multitasker - RESTORE
  3844.     AX = 5404h
  3845.     ES:DX = process swapping in
  3846. Note:    called by OmniView to notify programs loaded before OmniView of state
  3847.       changes inside OmniView
  3848. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  3849. --------T-155405-----------------------------
  3850. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  3851.     AX = 5405h
  3852.     ES:DX = process swapping in
  3853. Note:    called by OmniView to notify programs loaded before OmniView of state
  3854.       changes inside OmniView
  3855. SeeAlso: AX=5406h
  3856. --------T-155406-----------------------------
  3857. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  3858.     AX = 5406h
  3859.     ES:DX = process swapping in
  3860. Note:    called by OmniView to notify programs loaded before OmniView of state
  3861.       changes inside OmniView
  3862. SeeAlso: AX=5405h
  3863. --------T-155407-----------------------------
  3864. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  3865.     AX = 5407h
  3866. Note:    called by OmniView to notify programs loaded before OmniView of state
  3867.       changes inside OmniView
  3868. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  3869. --------B-1580-------------------------------
  3870. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  3871.     AH = 80h
  3872.     BX = device ID
  3873.     CX = process ID
  3874.     CF clear
  3875. Return: CF clear if successful
  3876.         AH = 00h
  3877.     CF set on error
  3878.         AH = status
  3879.         80h invalid command (PC,PCjr)
  3880.         86h function not supported (XT)
  3881. Note:    this function should be hooked by a multitasker which wishes to keep
  3882.       track of device ownership; the default BIOS handler merely returns
  3883.       successfully
  3884. SeeAlso: AH=81h,AH=82h
  3885. --------B-1581-------------------------------
  3886. INT 15 C - OS HOOK - DEVICE CLOSE
  3887.     AH = 81h
  3888.     BX = device ID
  3889.     CX = process ID
  3890.     CF clear
  3891. Return: CF clear if successful
  3892.         AH = 00h
  3893.     CF set on error
  3894.         AH = status (see AH=80h)
  3895. Note:    this function should be hooked by a multitasker which wishes to keep
  3896.       track of device ownership; the default BIOS handler merely returns
  3897.       successfully
  3898. SeeAlso: AH=80h,AH=82h
  3899. --------B-1582-------------------------------
  3900. INT 15 C - OS HOOK - PROGRAM TERMINATION
  3901.     AH = 82h
  3902.     BX = process ID
  3903.     CF clear
  3904. Return: CF clear if successful
  3905.         AH = 00h
  3906.     CF set on error
  3907.         AH = status (see AH=80h)
  3908. Notes:    closes all devices opened by the given process ID with function 80h
  3909.     this function should be hooked by a multitasker which wishes to keep
  3910.       track of device ownership; the default BIOS handler merely returns
  3911.       successfully
  3912. SeeAlso: AH=80h,AH=81h
  3913. --------B-1583-------------------------------
  3914. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  3915.     AH = 83h
  3916.     AL = subfunction
  3917.         00h set interval
  3918.         CX:DX = microseconds to delay
  3919.         ES:BX -> byte whose high bit is to be set at end of interval
  3920.         01h cancel wait interval
  3921. Return: CF set on error or function already busy
  3922.         AH = status
  3923.         80h invalid command (PC,PCjr)
  3924.         86h function not supported (XT and later)
  3925.     CF clear if successful
  3926. Notes:    the resolution of the wait period is 977 microseconds on most systems
  3927.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3928.       real-time clock chip which is available on INT 70
  3929.     IBM AT 1/10/84 BIOS ignores AL and always performs subfunction 00h
  3930. SeeAlso: AH=41h,AH=86h,INT 70
  3931. --------B-1584-------------------------------
  3932. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  3933.     AH = 84h
  3934.     DX = subfunction
  3935.         0000h read joystick switches
  3936.         Return: AL bits 7-4 = switch settings
  3937.         0001h read positions of joysticks
  3938.         Return: AX = X position of joystick A
  3939.             BX = Y position of joystick A
  3940.             CX = X position of joystick B
  3941.             DX = Y position of joystick B
  3942. Return: CF set on error
  3943.         AH = status
  3944.         80h invalid command (PC,PCjr)
  3945.         86h function not supported (other)
  3946.     CF clear if successful
  3947. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  3948.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  3949.     a 250kOhm joystick typically returns 0000h-01A0h
  3950. --------B-1585-------------------------------
  3951. INT 15 C - OS HOOK - SysRq KEY ACTIVITY (AT,PS)
  3952.     AH = 85h
  3953.     AL = 00h SysRq key pressed
  3954.        = 01h SysRq key released
  3955.     CF clear
  3956. Return: CF clear if successful
  3957.         AH = 00h
  3958.     CF set on error
  3959.         AH = status (see AH=84h)
  3960. Notes:    called by keyboard decode routine
  3961.     the default handler simply returns successfully; programs which wish
  3962.       to monitor the SysRq key must hook this call
  3963. SeeAlso: INT 09
  3964. --------B-1586-------------------------------
  3965. INT 15 - BIOS - WAIT (AT,PS)
  3966.     AH = 86h
  3967.     CX:DX = interval in microseconds
  3968. Return: CF clear if successful (wait interval elapsed)
  3969.     CF set on error or AH=83h wait already in progress
  3970.         AH = status (see AH=84h)
  3971. Note:    the resolution of the wait period is 977 microseconds on most systems
  3972.       because most BIOSes use the 1/1024 second fast interrupt from the AT
  3973.       real-time clock chip which is available on INT 70
  3974. SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
  3975. --------B-1587-------------------------------
  3976. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  3977.     AH = 87h
  3978.     CX = number of words to copy (max 8000h)
  3979.     ES:SI -> global descriptor table
  3980. Return: CF set on error
  3981.     CF clear if successful
  3982.     AH = status
  3983.         00h source copied into destination
  3984.         01h parity error
  3985.         02h interrupt error
  3986.         03h address line 20 gating failed
  3987.         80h invalid command (PC,PCjr)
  3988.         86h unsupported function (XT,PS30)
  3989. Notes:    copy is done in protected mode with interrupts disabled by the default
  3990.       BIOS handler; many 386 memory managers perform the copy with
  3991.       interrupts enabled
  3992.     this function is incompatible with the OS/2 compatibility box
  3993. SeeAlso: AH=88h,AH=89h
  3994.  
  3995. Format of global descriptor table:
  3996. Offset    Size    Description
  3997.  00h 16 BYTEs    zeros
  3998.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  3999.  12h  3 BYTEs    24-bit linear source address, low byte first
  4000.  15h    BYTE    source segment access rights (93h)
  4001.  16h    WORD    zero
  4002.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  4003.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  4004.  1Dh    BYTE    destination segment access rights (93h)
  4005.  1Eh 18 BYTEs    zeros
  4006. --------B-1588-------------------------------
  4007. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  4008.     AH = 88h
  4009. Return: CF clear if successful
  4010.         AX = number of contiguous KB starting at absolute address 100000h
  4011.     CF set on error
  4012.         AH = status
  4013.         80h invalid command (PC,PCjr)
  4014.         86h unsupported function (XT,PS30)
  4015. Notes:    TSRs which wish to allocate extended memory to themselves often hook
  4016.       this call, and return a reduced memory size.    They are then free to
  4017.       use the memory between the new and old sizes at will.
  4018.     the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
  4019.       for memory beyond 16MB
  4020. SeeAlso: AH=87h,AH=C7h
  4021. --------B-1589-------------------------------
  4022. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  4023.     AH = 89h
  4024.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  4025.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  4026.     ES:SI -> GDT for protected mode
  4027.            offset 0h  null descriptor (initialize to zeros)
  4028.               8h  GDT descriptor
  4029.              10h  IDT descriptor
  4030.              18h  DS
  4031.              20h  ES
  4032.              28h  SS
  4033.              30h  CS
  4034.              38h  uninitialized, used to build descriptor for BIOS CS
  4035.     CX = offset into protected-mode CS to jump to
  4036. Return: CF set on error
  4037.        AH = FFh  error enabling address line 20
  4038.     CF clear if successful
  4039.        AH = 00h
  4040.        in protected mode at specified address
  4041. Note:    BL and BH must be multiples of 8
  4042. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  4043. --------B-1590-------------------------------
  4044. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  4045.     AH = 90h
  4046.     AL = device type (see below)
  4047.     ES:BX -> request block for type codes 80h through BFh
  4048.     CF clear
  4049. Return: CF set if wait time satisfied
  4050.     CF clear if driver must perform wait
  4051.         AH = 00h
  4052. Notes:    type codes are allocated as follows:
  4053.       00-7F non-reentrant devices; OS must arbitrate access
  4054.       80-BF reentrant devices; ES:BX points to a unique control block
  4055.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  4056.     floppy and hard disk BIOS code uses this call to implement a timeout;
  4057.       for device types 00h and 01h, a return of CF set means that the
  4058.       timeout expired before the disk responded.
  4059.     this function should be hooked by a multitasker to allow other tasks
  4060.       to execute while the BIOS is waiting for I/O completion; the default
  4061.       handler merely returns with AH=00h and CF clear
  4062. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  4063.  
  4064. Values for device type:
  4065.  00h    disk
  4066.  01h    diskette
  4067.  02h    keyboard
  4068.  03h    PS/2 pointing device
  4069.  21h    waiting for keyboard input (Phoenix BIOS)
  4070.  80h    network
  4071.  FBh    digital sound (Tandy)
  4072.  FCh    disk reset (PS)
  4073.  FDh    diskette motor start
  4074.  FEh    printer
  4075. --------B-1591-------------------------------
  4076. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  4077.     AH = 91h
  4078.     AL = device type (see AH=90h)
  4079.     ES:BX -> request block for type codes 80h through BFh
  4080.     CF clear
  4081. Return: AH = 00h
  4082. Note:    this function should be hooked by a multitasker to allow other tasks
  4083.       to execute while the BIOS is waiting for I/O completion; the default
  4084.       handler merely returns with AH=00h and CF clear
  4085. SeeAlso: AH=90h
  4086. --------b-15BC-------------------------------
  4087. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED
  4088.     AH = BCh
  4089. Return: CF clear
  4090.     BYTE 0040h:00B0h set to ??? (43 on my 386/33)
  4091. Note:    reads system timer channel 0 twice, then does calculations on returned
  4092.       values
  4093. --------E-15BF00-----------------------------
  4094. INT 15 - Rational Systems DOS/16M - ???
  4095.     AX = BF00h
  4096.     ???
  4097. Return: ???
  4098. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  4099. SeeAlso: AX=BF02h
  4100. --------E-15BF01-----------------------------
  4101. INT 15 - Rational Systems DOS/16M - ???
  4102.     AX = BF01h
  4103.     ???
  4104. Return: ???
  4105. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  4106.     called by DOS/4GW
  4107. SeeAlso: AX=BF00h,AX=BF02h
  4108. --------E-15BF02DX0000-----------------------
  4109. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  4110.     AX = BF02h
  4111.     DX = 0000h
  4112. Return: DX = nonzero if installed
  4113.         DX:SI -> XBRK structure (see below)
  4114. Note:    this function is also supported by DOS/4G
  4115. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  4116. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  4117.  
  4118. Format of XBRK structure:
  4119. Offset    Size    Description
  4120.  00h    DWORD    linear address of first available byte
  4121.  04h    DWORD    linear address of last available byte + 1 ???
  4122.  08h    DWORD    real-mode address of XBRK structure???
  4123.  0Ch    DWORD    ???
  4124.  10h  2 BYTEs    ???
  4125.  12h    WORD    segment of ???
  4126.  14h  8 BYTEs    ???
  4127.  1Ch 512 BYTEs    protected-mode IDT
  4128. 21Ch  N BYTEs    protected-mode GDT
  4129. --------E-15BF03-----------------------------
  4130. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  4131.     AX = BF03h
  4132.     BX = PSP segment of extender
  4133.     ???
  4134. Return: ???
  4135. Note:    if BX is not the PSP segment of the extender, it passes the call down
  4136.       the INT 15 chain; this allows nested instances of the extender
  4137. SeeAlso: AX=BF06h
  4138. --------E-15BF04-----------------------------
  4139. INT 15 - Rational Systems DOS/4GW - ???
  4140.     AX = BF04h
  4141.     BX = PSP segment of extender
  4142. Return: nothing???
  4143. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  4144.       the INT 15 chain; this allows nested instances of the extender
  4145.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  4146. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  4147. --------E-15BF05-----------------------------
  4148. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  4149.     AX = BF05h
  4150.     BX = PSP segment of extender
  4151. Return: nothing???
  4152. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  4153.       the INT 15 chain; this allows nested instances of the extender
  4154.     calls INT 67/AX=DE01h if ???
  4155. --------E-15BF06-----------------------------
  4156. INT 15 - Rational Systems DOS/4GW - ???
  4157.     AX = BF06h
  4158.     BX = PSP segment of extender
  4159.     ???
  4160. Return: ???
  4161. Note:    if BX is not the PSP segment of the extender, it passes the call down
  4162.       the INT 15 chain; this allows nested instances of the extender
  4163. SeeAlso: AX=BF03h
  4164. --------E-15BFDCDX0000-----------------------
  4165. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  4166.     AX = BFDCh
  4167.     DX = 0000h
  4168.     SI = 0000h
  4169. Return: DX = nonzero if installed
  4170.         DX:SI -> XBRK structure (see AX=BF02h)
  4171. SeeAlso: AX=BF02h
  4172. --------E-15BFDEBX0000-----------------------
  4173. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  4174.     AX = BFDEh
  4175.     BX = 0000h
  4176. Return: AX = ??? (0003h)
  4177.     BX = FFFFh
  4178. SeeAlso: AX=BF02h
  4179. --------E-15BFDEBX0001-----------------------
  4180. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  4181.     AX = BFDEh
  4182.     BX = 0001h
  4183. Return: BX = 0000h (success)
  4184.     CX:DX -> name of process manager executable
  4185. SeeAlso: AX=BFDEh/BX=0000h
  4186. --------E-15BFDEBX0002-----------------------
  4187. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4188.     AX = BFDEh
  4189.     BX = 0002h
  4190.     CX:DX -> ???
  4191. Return: BX = 0000h (success)
  4192. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  4193. --------E-15BFDEBX0003-----------------------
  4194. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4195.     AX = BFDEh
  4196.     BX = 0003h
  4197. Return: BX = 0000h (success)
  4198.     CX:DX -> ???
  4199. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  4200. --------E-15BFDEBX0004-----------------------
  4201. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4202.     AX = BFDEh
  4203.     BX = 0004h
  4204.     CL = ???
  4205. Return: BX = 0000h (success)
  4206.     CX:DX -> XBRK structure (see AX=BF02h)
  4207. SeeAlso: AX=BFDEh/BX=0000h
  4208. --------E-15BFDEBX0005-----------------------
  4209. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4210.     AX = BFDEh
  4211.     BX = 0005h
  4212.     CX = new value for ???
  4213. Return: BX = 0000h (success)
  4214.     AX = old value of ???
  4215.     DS:SI -> ??? (if AX nonzero on return)
  4216.     ES:DI -> ??? (if AX zero on return)
  4217. Note:    called by DOS4GW.EXE
  4218. SeeAlso: AX=BFDEh/BX=0000h
  4219. --------E-15BFDEBX0006-----------------------
  4220. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4221.     AX = BFDEh
  4222.     BX = 0006h
  4223. Return: BX = 0000h (success)
  4224.     AH = interrupt number??? (BEh)
  4225.     CX:DX = ???
  4226. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  4227. --------E-15BFDEBX0007-----------------------
  4228. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4229.     AX = BFDEh
  4230.     BX = 0007h
  4231.     CX:DX = ???
  4232. Return: BX = 0000h (success)
  4233. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  4234. --------E-15BFDEBX0008-----------------------
  4235. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4236.     AX = BFDEh
  4237.     BX = 0008h
  4238.     CX = segment of ???
  4239.     DS = ???
  4240. Return: BX = status
  4241.         0000h successful
  4242.         AL = ??? (80h or C0h)
  4243.         DX = ??? (0603h) if AL=C0h
  4244.         0001h failed
  4245.         AX = 0000h
  4246. Note:    called by DOS4GW.EXE
  4247. SeeAlso: AX=BFDEh/BX=0000h
  4248. --------E-15BFDEBX0009-----------------------
  4249. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  4250.     AX = BFDEh
  4251.     BX = 0009h
  4252. Return: BX = 0000h (success)
  4253.     CX:DX -> full pathname to LOAD32.EXP
  4254. SeeAlso: AX=BFDEh/BX=0000h
  4255. --------E-15BFDEBX000A-----------------------
  4256. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  4257.     AX = BFDEh
  4258.     BX = 000Ah
  4259. Return: BX = 0000h (success)
  4260.     AX = new value of ??? counter
  4261. Notes:    also resets a variety of values if the counter goes negative
  4262.     called by DOS4GW.EXE
  4263. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  4264. --------E-15BFDEBX000B-----------------------
  4265. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  4266.     AX = BFDEh
  4267.     BX = 000Bh
  4268. Return: AX = new value of ??? counter
  4269. Note:    called by DOS4GW.EXE
  4270. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  4271. --------E-15BFDEBX000C-----------------------
  4272. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4273.     AX = BFDEh
  4274.     BX = 000Ch
  4275.     CL = ???
  4276.         00h
  4277.         nonzero
  4278. Return: ???
  4279. SeeAlso: AX=BFDEh/BX=0000h
  4280. --------E-15BFDEBX000D-----------------------
  4281. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4282.     AX = BFDEh
  4283.     BX = 000Dh
  4284.     ???
  4285. Return: ???
  4286. SeeAlso: AX=BFDEh/BX=0000h
  4287. --------E-15BFDEBX000E-----------------------
  4288. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4289.     AX = BFDEh
  4290.     BX = 000Eh
  4291.     DX:CX -> ???
  4292. Return: AX = segment of handle for calling task
  4293.     BX = ??? (probably destroyed)
  4294.     DX:CX -> ???
  4295. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  4296. --------E-15BFDEBX000F-----------------------
  4297. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  4298.     AX = BFDEh
  4299.     BX = 000Fh
  4300. Return: AX = segment of handle for calling task
  4301.     BX = ??? (probably destroyed)
  4302.     DX:CX -> ???
  4303. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  4304. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  4305. --------E-15BFDEBX0010-----------------------
  4306. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  4307.     AX = BFDEh
  4308.     BX = 0010h
  4309. Return: AX = segment of caller's task handle
  4310.     BX destroyed
  4311. SeeAlso: AX=BFDEh/BX=000Fh
  4312. --------E-15BFDEBX0011-----------------------
  4313. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4314.     AX = BFDEh
  4315.     BX = 0011h
  4316. Return: CX = code segment of DVDOS4GX.DVR
  4317.     BX = ??? (0004h)
  4318. SeeAlso: AX=BFDEh/BX=0000h
  4319. --------E-15BFDEBX0012-----------------------
  4320. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4321.     AX = BFDEh
  4322.     BX = 0012h
  4323. Return: DX = code segment of DVDOS4GX.DVR
  4324.     BX = ??? (012Ch)
  4325.     CX = ??? (0006h)
  4326. SeeAlso: AX=BFDEh/BX=0000h
  4327. --------E-15BFDEBX0013-----------------------
  4328. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4329.     AX = BFDEh
  4330.     BX = 0013h
  4331. Return: DX:CX -> ???
  4332. SeeAlso: AX=BFDEh/BX=000Eh
  4333. --------E-15BFDEBX0014-----------------------
  4334. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  4335.     AX = BFDEh
  4336.     BX = 0014h
  4337.     CX = index of ??? mailbox
  4338.         (0000h-0004h valid, but no range checking done)
  4339. Return: AX,BX destroyed
  4340. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  4341. --------E-15BFDEBX0015-----------------------
  4342. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  4343.     AX = BFDEh
  4344.     BX = 0015h
  4345.     CX = index of ??? mailbox
  4346.         (0000h-0004h valid, but no range checking done)
  4347. Return: AX,BX destroyed
  4348. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  4349. --------E-15BFDEBX0016-----------------------
  4350. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  4351.     AX = BFDEh
  4352.     BX = 0016h
  4353.     CX = index of ??? mailbox
  4354.         (0000h-0004h valid, but no range checking done)
  4355. Return: AX = status
  4356.         0000h no one owns mailbox
  4357.         0001h mailbox has an owner
  4358.     BX destroyed
  4359. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  4360. --------E-15BFDEBX0017-----------------------
  4361. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  4362.     AX = BFDEh
  4363.     BX = 0017h
  4364.     CX = index of ??? mailbox
  4365.         (0000h-0004h valid, but no range checking done)
  4366. Return: AX = segment of mailbox owner's handle
  4367.     BX = segment of caller's task handle
  4368. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  4369. --------E-15BFDEBXFFFD-----------------------
  4370. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  4371.     AX = BFDEh
  4372.     BX = FFFDh
  4373. Return: CX:DX = ???
  4374. SeeAlso: AX=BFDEh/BX=FFFEh
  4375. --------E-15BFDEBXFFFE-----------------------
  4376. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  4377.     AX = BFDEh
  4378.     BX = FFFEh
  4379.     CX:DX = ???
  4380. SeeAlso: AX=BFDEh/BX=FFFDh
  4381. --------E-15BFDEBXFFFF-----------------------
  4382. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  4383.     AX = BFDEh
  4384.     BX = FFFFh
  4385. SeeAlso: AX=BFDEh/BX=0000h
  4386. --------B-15C0-------------------------------
  4387. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  4388.     AH = C0h
  4389. Return: CF set if BIOS doesn't support call
  4390.     CF clear on success
  4391.         ES:BX -> ROM table (see below)
  4392.     AH = status
  4393.         00h successful
  4394.         86h unsupported function
  4395. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  4396.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  4397.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  4398.       and a model byte at absolute address FE845h
  4399.     Tandy 1000 machines contain 21h in the byte at F000h:C000h
  4400.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  4401.       past the end of the configuration table
  4402.     the Phoenix 386 BIOS contains a second version and date string
  4403.       (presumably the last modification for that OEM version) beginning at
  4404.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  4405.       the complete information)
  4406. SeeAlso: AH=C7h,AH=C9h,AH=D1h
  4407.  
  4408. Format of ROM configuration table:
  4409. Offset    Size    Description
  4410.  00h    WORD    number of bytes following
  4411.  02h    BYTE    model (see below)
  4412.  03h    BYTE    submodel (see below)
  4413.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  4414.  05h    BYTE    feature byte 1:
  4415.         bit 7: DMA channel 3 used by hard disk BIOS
  4416.         bit 6: 2nd 8259 installed
  4417.         bit 5: Real-Time Clock installed
  4418.         bit 4: INT 15/AH=4Fh called upon INT 09h
  4419.         bit 3: wait for external event (INT 15/AH=41h) supported
  4420.         bit 2: extended BIOS area allocated (usually at top of RAM)
  4421.         bit 1: bus is Micro Channel instead of ISA
  4422.         bit 0: system has dual bus (Micro Channel + ISA)
  4423.  06h    BYTE    feature byte 2:
  4424.         bit 7: reserved
  4425.         bit 6: INT 16/AH=09h (keyboard functionality) supported
  4426.         bit 5: INT 15/AH=C6h (get POS data) supported
  4427.         bit 4: INT 15/AH=C7h (return memory map info) supported
  4428.         bit 3: INT 15/AH=C8h (en/disable CPU functions) supported
  4429.         bit 2: non-8042 keyboard controller
  4430.         bit 1: data streaming supported
  4431.         bit 0: reserved
  4432.  07h    BYTE    feature byte 3:
  4433.         bits 7-5 reserved
  4434.         bit 4: ??? (set on 1992 PS/1's, N51SX, CL57SX, 35SX?, 40SX?)
  4435.         bit 3: SCSI subsystem supported on system board
  4436.         bit 2: information panel installed
  4437.         bit 1: IML (Initial Machine Load) system
  4438.         bit 0: SCSI supported in IML
  4439.  08h    BYTE    feature byte 4:
  4440.         bit 7: ??? (set on N51SX, CL57SX)
  4441.         bits 6-4: reserved
  4442.         bit 3: ??? (set on some 1992 PS/1's, 35SX, 40SX)
  4443.         bits 2-1: reserved
  4444.         bit 0: ??? (set on N51SX, CL57SX, 57SX)
  4445.  09h    BYTE    feature byte 5:
  4446.         reserved (0) (IBM)
  4447.         ??? (08h) (Phoenix 386 v1.10)
  4448. ---AWARD BIOS---
  4449.  0Ah  N BYTEs    AWARD copyright notice
  4450. ---Phoenix BIOS---
  4451.  0Ah    BYTE    ??? (00h)
  4452.  0Bh    BYTE    major version
  4453.  0Ch    BYTE    minor version (BCD)
  4454.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  4455. ---Quadram Quad386---
  4456.  0Ah 17 BYTEs    ASCII signature string "Quadram Quad386XT"
  4457.  
  4458. Values for model/submodel/revision:
  4459. Model  Submdl  Rev    BIOS date    System
  4460.  FFh    *    *    04/24/81    PC (original)
  4461.  FFh    *    *    10/19/81    PC (some bugfixes)
  4462.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  4463.  FFh    46h    ***      ???        Olivetti M15
  4464.  FEh    *    *    08/16/82    PC XT
  4465.  FEh    *    *    11/08/82    PC XT and Portable
  4466.  FEh    43h    ***      ???        Olivetti M240
  4467.  FEh    A6h    ???      ???        Quadram Quad386
  4468.  FDh    *    *    06/01/83    PCjr
  4469.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  4470.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  4471.  FCh    00h    <> 01h      ???        7531/2 Industrial AT
  4472.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  4473.  FCh    01h    00h    09/17/87    Tandy 3000
  4474.  FCh    01h    00h    01/15&88    Toshiba T5200/100
  4475.  FCh    01h    00h    12/26*89    Toshiba T1200/XE
  4476.             (Those date characters are not typos)
  4477.  FCh    01h    30h      ???        Tandy 3000NL
  4478.  FCh    01h    ???      ???        Compaq 286/386
  4479.  FCh    02h    00h    04/21/86    PC XT-286
  4480.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  4481.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  4482.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  4483.  FCh    06h    ???      ???        7552 "Gearbox"
  4484.  FCh    08h    ***      ???        Epson, unknown model
  4485.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  4486.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  4487.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  4488.  FCh    30h    ***      ???        Epson, unknown model
  4489.  FCh    31h    ***      ???        Epson, unknown model
  4490.  FCh    33h    ***      ???        Epson, unknown model
  4491.  FCh    42h    ***      ???        Olivetti M280
  4492.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  4493.  FCh    48h    ***      ???        Olivetti M290
  4494.  FCh    4Fh    ***      ???        Olivetti M250
  4495.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  4496.  FCh    51h    ***      ???        Olivetti PCS286
  4497.  FCh    52h    ***      ???        Olivetti M300
  4498.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  4499.  FBh    00h    01h    01/10/86    PC XT, Enh Keyb, 3.5" support
  4500.  FBh    00h    02h    05/09/86    PC XT
  4501.  FBh    4Ch    ***      ???        Olivetti M200
  4502.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  4503.  FAh    00h    01h    12/12/86    PS/2 Model 30
  4504.  FAh    01h    00h      ???        PS/2 Model 25/25L (8 MHz 8086)
  4505.  FAh    4Eh    ***      ???        Olivetti M111
  4506.  F9h    00h    00h    09/13/85    PC Convertible
  4507.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  4508.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  4509.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  4510.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  4511.  F8h    09h    00h      ???        PS/2 Model 70 16MHz, type 1 system brd
  4512.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  4513.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  4514.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  4515.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  4516.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  4517.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  4518.  F8h    11h    00h    10/01/90    PS/2 Model 90 (25 MHz 486)
  4519.  F8h    13h    00h    10/01/90    PS/2 Model 90 (33 MHz 486)
  4520.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486)
  4521.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD (33 MHz 486)
  4522.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  4523.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  4524.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 (16 MHz 386SX)
  4525.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  4526.  F8h    23h    01h      ???        PS/2 Model L40 (20 MHz 386SX)
  4527.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  4528.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  4529.  F8h    2Ah    00h      ???        PS/2 Model 95 (50 MHz 486)
  4530.  F8h    2Bh    00h      ???        PS/2 Model 90 (50 MHz 486)
  4531.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  4532.  F8h    2Dh    00h      ???        PS/2 Model 90 (20 MHz 486SX)
  4533.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  4534.  F8h    2Fh    00h      ???        PS/2 Model 90 (20 MHz 486SX + 487SX)
  4535.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  4536.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  4537.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  4538.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  4539.  F8h    61h    ***      ???        Olivetti P500
  4540.  F8h    62h    ***      ???        Olivetti P800
  4541.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  4542.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21
  4543.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  4544.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  4545.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  4546.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  4547.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  4548.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  4549.  30h    ???    ???      ???        Sperry PC
  4550.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  4551.  ???    56h    ???      ???        Olivetti, unknown model
  4552.  ???    74h    ???      ???        Olivetti, unknown model
  4553.     * This BIOS call is not implemented in these early versions.
  4554.       Read Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h.
  4555.    ** These BIOS versions require the DASDDRVR.SYS patches.
  4556.   *** These Olivetti and Epson machines store the submodel in the byte at
  4557.     F000h:FFFDh.
  4558.  
  4559. Values for Dell model byte:
  4560.  02h    Dell 200
  4561.  03h    Dell 300
  4562.  05h    Dell 220
  4563.  06h    Dell 310
  4564.  07h    Dell 325
  4565.  09h    Dell 310A
  4566.  0Ah    Dell 316
  4567.  0Bh    Dell 220E
  4568.  0Ch    Dell 210
  4569.  0Dh    Dell 316SX
  4570.  0Eh    Dell 316LT
  4571.  0Fh    Dell 320LX
  4572.  11h    Dell 425E
  4573. --------B-15C1-------------------------------
  4574. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  4575.     AH = C1h
  4576. Return: CF set on error
  4577.     CF clear if successful
  4578.         ES = segment of data area
  4579. SeeAlso: AH=04h"ABIOS"
  4580. --------M-15C200-----------------------------
  4581. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  4582.     AX = C200h
  4583.     BH = new state
  4584.         00h disabled
  4585.         01h enabled
  4586. Return: CF set on error
  4587.     AH = status
  4588.         00h successful
  4589.         01h invalid function
  4590.         02h invalid input
  4591.         03h interface error
  4592.         04h need to resend
  4593.         05h no device handler installed
  4594. --------M-15C201-----------------------------
  4595. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  4596.     AX = C201h
  4597. Return: CF set on error
  4598.         AH = status (see AX=C200h)
  4599.     CF clear if successful
  4600.         BH = device ID
  4601.         BL = value returned by attached device after reset
  4602.         AAh if device is a mouse
  4603. Note:    after successful completion of this call, the pointing device is set
  4604.       as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
  4605.       scaling 1:1, unchanged data package size
  4606. SeeAlso: INT 33/AX=0000h
  4607. --------M-15C202-----------------------------
  4608. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  4609.     AX = C202h
  4610.     BH = sampling rate
  4611.         00h 10/second
  4612.         01h 20/second
  4613.         02h 40/second
  4614.         03h 60/second
  4615.         04h 80/second
  4616.         05h 100/second
  4617.         06h 200/second
  4618. Return: CF set on error
  4619.         AH = status (see AX=C200h)
  4620. SeeAlso: INT 33/AX=001Ch
  4621. --------M-15C203-----------------------------
  4622. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  4623.     AX = C203h
  4624.     BH = resolution
  4625.         00h one count per mm
  4626.         01h two counts per mm
  4627.         02h four counts per mm
  4628.         03h eight counts per mm
  4629. Return: CF set on error
  4630.         AH = status (see AX=C200h)
  4631. --------M-15C204-----------------------------
  4632. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  4633.     AX = C204h
  4634. Return: CF set on error
  4635.         AH = status (see AX=C200h)
  4636.     CF clear if successful
  4637.         BH = device ID
  4638. --------M-15C205-----------------------------
  4639. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  4640.     AX = C205h
  4641.     BH = data package size (1 - 8 bytes)
  4642. Return: CF set on error
  4643.         AH = status (see AX=C200h)
  4644. Note:    the pointing device is set as follows: disabled, 100 Hz sample rate,
  4645.       resolution 4 counts/mm, scaling 1:1
  4646. SeeAlso: AX=C201h
  4647. --------M-15C206-----------------------------
  4648. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
  4649.     AX = C206h
  4650.     BH = subfunction
  4651.         00h return device status
  4652.         Return: BL = pointing device status (see below)
  4653.             CL = resolution (see AX=C203h)
  4654.             DL = sample rate, reports per second
  4655.         01h set scaling at 1:1
  4656.         02h set scaling at 2:1
  4657. Return: CF set on error
  4658.         AH = status (see AX=C200h)
  4659.  
  4660. Bitfields for pointing device status:
  4661.  bit 0    right button pressed
  4662.  bit 1    reserved
  4663.  bit 2    left button pressed
  4664.  bit 3    reserved
  4665.  bit 4    0 if 1:1 scaling, 1 if 2:1 scaling
  4666.  bit 5    device enabled
  4667.  bit 6    0 if stream mode, 1 if remote mode
  4668.  bit 7    reserved
  4669. --------M-15C207-----------------------------
  4670. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  4671.     AX = C207h
  4672.     ES:BX -> FAR user device handler
  4673. Return: CF set on error
  4674.         AH = status (see AX=C200h)
  4675. Note:    when the subroutine is called, it is passed the following values on
  4676.       the stack; the handler should return with a FAR return without
  4677.       popping the stack:
  4678.         WORD 1: status (see below)
  4679.         WORD 2: X data (high byte = 00h)
  4680.         WORD 3: Y data (high byte = 00h)
  4681.         WORD 4: 0000h
  4682. SeeAlso: INT 33/AX=000Ch
  4683.  
  4684. Bitfields for status:
  4685.  bits 15-8 reserved (0)
  4686.  bit 7    Y data overflowed
  4687.  bit 6    X data overflowed
  4688.  bit 5    Y data is negative
  4689.  bit 4    X data is negative
  4690.  bit 3    reserved (1)
  4691.  bit 2    reserved (0)
  4692.  bit 1    right button pressed
  4693.  bit 0    left button pressed
  4694. --------B-15C3------------------------------
  4695. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  4696.     AH = C3h
  4697.     AL = function
  4698.         00h disable PS/2 watchdog timer
  4699.         01h enable PS/2 watchdog timer
  4700.         BX = timer counter (0001h-00FFh)
  4701.         02h disable Gearbox system
  4702.         03h enable Gearbox system
  4703. Return: CF set on error
  4704.     CF clear if successful
  4705. Note:    the watchdog timer generates an NMI
  4706. --------B-15C4-------------------------------
  4707. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  4708.     AH = C4h
  4709.     AL = subfunction
  4710.         00h return base POS register address
  4711.         01h enable selected slot for setup
  4712.         BL = slot number (1 to 8)
  4713.         02h disable setup for all slots
  4714. Return: CF set on error
  4715.     DX = base POS register address (if subfunction 00h)
  4716. SeeAlso: AH=C6h
  4717. --------B-15C5-------------------------------
  4718. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  4719.     AH = C5h
  4720.     AL = interrupt being invoked
  4721.         01h INT 19
  4722.         02h INT 14
  4723.         03h INT 16
  4724.         04h INT 40 (floppy INT 13)
  4725.         05h INT 17
  4726.         06h INT 10
  4727.         07h INT 12
  4728.         08h INT 11
  4729.         09h INT 1A
  4730. Return: all registers except AX must be preserved
  4731. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  4732.       handlers on the PS/2 Models 30/286, 50Z, and 95
  4733.     default handler does nothing and returns CF clear for the above
  4734.       subfunctions, CF set and AH=86h for all other subfunctions
  4735.     value of AX passed to the original interrupt handler is pushed on
  4736.       stack immediately prior to call
  4737. --------B-15C6-------------------------------
  4738. INT 15 U - later PS/2 models - GET POS DATA
  4739.     AH = C6h
  4740.     ???
  4741. Return: ???
  4742. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  4743.     IBM reports that "there are a number of problems with this call" and
  4744.       does not recommend its use.
  4745. SeeAlso: AH=C4h
  4746. --------B-15C7-------------------------------
  4747. INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
  4748.     AH = C7h
  4749.     DS:SI -> user supplied memory map table (see below)
  4750. Note:    call AH=C0h and examine bit 4 of feature byte 2 to check if this
  4751.       function is supported
  4752. Return: CF set on error, clear if successful
  4753. SeeAlso: AH=C0h,AH=C9h,AH=D1h
  4754.  
  4755. Format of memory-map table structure:
  4756. Offset    Size    Description
  4757.  00h    WORD    length of table (excluding this word)
  4758.  02h    DWORD    local memory between 1M and 16M, in 1K blocks
  4759.  06h    DWORD    local memory between 16M and 4G, in 1K blocks
  4760.  0Ah    DWORD    system memory between 1M and 16M, in 1K blocks
  4761.  0Eh    DWORD    system memory between 16M and 4G, in 1K blocks
  4762.  12h    DWORD    cacheable memory between 1M and 16M, in 1K blocks
  4763.  16h    DWORD    cacheable memory between 16M and 4G, in 1K blocks
  4764.  1Ah    DWORD    1K blocks before start of non-system memory between 1M and 16M
  4765.  1Eh    DWORD    1K blocks before start of non-system memory between 16M and 4G
  4766.  22h  2 DWORDs    reserved
  4767. --------B-15C8-------------------------------
  4768. INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
  4769.     AH = C8h
  4770.     AL = function
  4771.         00h disable cache or (90 and 95) disable cache L1
  4772.         01h enable cache or (90 and 95) enable cache L1
  4773.         ---models 90 and 95 only---
  4774.         02h disable cache L2
  4775.         03h enable cache L2
  4776.         04h disable both caches
  4777.         05h enable both caches
  4778.         06h return status of both caches
  4779.         07h-FFh Reserved
  4780. Return: CF set on error
  4781.     CF clear if successful
  4782.         AH = status (see below)
  4783.     For subfunction 06h only:
  4784.         BH = status of cache L2
  4785.         00h enabled
  4786.         01h disabled or not installed
  4787.         BL = status of cache L1 (same codes as BH)
  4788. Notes:     supported by at least PS/2 70, 70/486, 80-A21, 90, 95
  4789.     call AH=C0h and examine bit 3 of feature byte 2 to check if this
  4790.       function is supported.
  4791.     on a 486 system, any external caches must be disabled when the
  4792.       on-chip cache (L1) is disabled.
  4793. SeeAlso: AH=C0h
  4794.  
  4795. Values for status:
  4796.  00h    operation successful
  4797.  01h    function choice (in AL) is invalid
  4798.  02h    NVRAM data is invalid
  4799.  03h    cache test error
  4800.  04h    (90 and 95 only) cannot perform operation requested due to state of
  4801.       other cache (see note above)
  4802.  05h    no L2 cache is present
  4803. --------B-15C9-------------------------------
  4804. INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  4805.     AH = C9h
  4806.     AL = 10h (may be required on some non-PS BIOSes)
  4807. Return: CF clear if successful
  4808.         AH = 00h
  4809.         CH = CPU type
  4810.         03h 80386DX or clone
  4811.         04h 80486
  4812.         23h 80386SX or clone
  4813.         CL = mask revision (stepping level)
  4814.         80386:
  4815.             03h B1
  4816.             05h D0
  4817.             08h D1/D2/E1
  4818.         80386SX
  4819.             08h D1
  4820.     CF set on error
  4821.         AH = status (80h,86h = function not supported)
  4822. Notes:    the BIOS must save DX at startup in order to be able to support this
  4823.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  4824.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  4825. --------B-15CA-------------------------------
  4826. INT 15 U - PS/2 Model 95 - RESERVED
  4827.     AH = CAh
  4828.     ???
  4829. Return: ???
  4830. --------B-15CB-------------------------------
  4831. INT 15 U - PS/2 Model 95 - RESERVED
  4832.     AH = CBh
  4833.     ???
  4834. Return: ???
  4835. --------B-15CC-------------------------------
  4836. INT 15 U - PS/2 Model 95 - RESERVED
  4837.     AH = CCh
  4838.     ???
  4839. Return: ???
  4840. --------B-15CD-------------------------------
  4841. INT 15 U - PS/2 Model 95 - RESERVED
  4842.     AH = CDh
  4843.     ???
  4844. Return: ???
  4845. --------B-15CE--BL00-------------------------
  4846. INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
  4847.     AH = CEh
  4848.     BL = 00h-0Eh arbitration level to be allocated
  4849.          0Fh-FFh reserved
  4850.     AL = option byte
  4851.         bit 7-1: reserved (0)
  4852.         bit 0: 0 = need DMA channel for arbitration level requested
  4853.            1 = no channel required for arbitration level
  4854. Return: CF set on error
  4855.         AH = status (80h,86h = function not supported)
  4856.     CF clear on success
  4857.         AL = channel number
  4858.         00h-07h channel number allocated for the arbiration level
  4859.         08h-FEh reserved
  4860.         FFh    no channel requested for arbitration level
  4861.         AH = status
  4862.         00h success
  4863.         01h arbitration level not available
  4864.         02h channel not available
  4865.         03h invalid arbitration level passed
  4866. Notes:     arbitration level 00h has the highest priority, 0Eh the lowest
  4867.      to perform a DMA transfer operation, be sure to call this function
  4868.        first, and call AH=CFh afterward.  Failure to use this function
  4869.        can cause unpredictable results.
  4870. SeeAlso: AH=CFh
  4871. --------B-15CF-------------------------------
  4872. INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
  4873.     AH = CFh
  4874.     BL = arbitration level to be deallocated (see AH=CEh)
  4875. Return: CF set on error
  4876.         AH = status (80h,86h = function not supported)
  4877.     CF clear on success
  4878.         AH = status
  4879.         00h success
  4880.         04h arbitration level not allocated
  4881. SeeAlso: AH=CEh
  4882. --------B-15D0-------------------------------
  4883. INT 15 - later PS/2s - RESERVED
  4884.     AH = D0h
  4885.     ???
  4886. Return: ???
  4887. --------B-15D100DX0000-----------------------
  4888. INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
  4889.     AX = D100h
  4890.     DX = 0000h (reserved, must set to 0)
  4891. Return: BL = size of one DDT entry, in bytes
  4892.     CX = number of DDT entries
  4893.     AH = return code (see below)
  4894.     CF set on error
  4895.     CF clear on success
  4896. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
  4897.  
  4898. Values for return code:
  4899.  00h    success
  4900.  01h    requested DDT entry not found
  4901.  02h    DDT data not valid
  4902.  86h    function not supported
  4903. --------B-15D101-----------------------------
  4904. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
  4905.     AX = D101h
  4906.     BX = number of requested entry (starting with 1)
  4907.     DX = 0000h (reserved, must be set to 0)
  4908.     ES:DI -> buffer to contain DDT entry (see below)
  4909. Return:    AH = return code (see AX=D100h)
  4910.     CF set on error
  4911.     CF clear on success
  4912.         ES:DI buffer filled with DDT entry
  4913. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
  4914.  
  4915. Format of DDT:
  4916. Offset    Size    Description
  4917.  00h    BYTE    bits 7-4: reserved (set to 0)
  4918.         bits 3-0: slot of device (0 = system board)
  4919.  01h    BYTE    bits 7-4: second interrupt for this device (0 = none)
  4920.         bits 3-0: first interrupt for this device (0 = none)
  4921.  02h    BYTE    bits 7-4: second arbitration level for this device
  4922.         bits 3-0: first arbitration level for this device
  4923.  03h    WORD    DDT indicators (see below)
  4924.  05h    BYTE    reserved (0)
  4925.  06h    WORD    device ID (0 = none)
  4926.  08h    WORD    starting address of first  I/O block (0 = none)
  4927.  0Ah    WORD    starting address of second I/O block (0 = none)
  4928.  OCh    WORD    starting address of third  I/O block (0 = none)
  4929.  OEh    DWORD    start of first non-system memory block (0 = none)
  4930.  12h    WORD    size of first non-system memory block (in kilobytes)
  4931.  14h    DWORD    start of second non-system memory block (0 = none)
  4932.  18h    WORD    size of second non-system memory block (in kilobytes)
  4933.  1Ah    BYTE    implementation identifier of the device
  4934.  1Bh    BYTE    implementation revision level of the device
  4935. Note:    I/O block addresses and non-system memory addresses are listed in
  4936.       ascending order in each DDT entry.
  4937.  
  4938. Bitfields for DDT indicators:
  4939.  bit 15 reserved (0)
  4940.  bit 14 second arbitration level exists
  4941.  bit 13 first arbitration level exists
  4942.  bit 12 serial interface is RS-422
  4943.  bit 11 not address limited
  4944.  bit 10 DMA channel used
  4945.  bit 9    second arbitration level can be shared
  4946.  bit 8    first arbitration level can be shared
  4947.  bits 7-0 reserved (0)
  4948. --------B-15D102-----------------------------
  4949. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
  4950.     AX = D102h
  4951.     BX = entry number at which to start searching
  4952.     CX = requested I/O port address
  4953.     DX = 0000h (reserved, must be set to 0)
  4954.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  4955. Return:    AH = return code (see AX=D100h)
  4956.     BX = DDT entry number where I/O port was found, or total entries
  4957.          plus 1 if port was not found.
  4958.     CF set on error
  4959.     CF clear on success
  4960.         ES:DI buffer filled with DDT entry
  4961. Desc:    the DDT is searched from the specified entry for the I/O port in CX,
  4962.       and the first entry in which it is found is returned
  4963. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
  4964. --------B-15D103DX0000-----------------------
  4965. INT 15 - later PS/2s - RETURN ENTIRE DDT
  4966.     AX = D103h
  4967.     DX = 0000h (reserved, must be set to 0)
  4968.     ES:DI -> buffer to contain DDT entry (see AX=D101h)
  4969. Return:    AH = return code (see AX=D100h)
  4970.     CF set on error
  4971.     CF clear on success
  4972.         ES:DI buffer filled with DDT entry
  4973. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
  4974. --------B-15D104-----------------------------
  4975. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
  4976.     AX = D104h
  4977.     BX = entry number at which to start searching
  4978.     CX = requested device ID
  4979.     DX = 0000h (reserved, must be set to 0)
  4980.     ES:DI -> buffer to contain DDT entry (see AX=D101h for format)
  4981. Return:    AH = return code (see AX=D100h)
  4982.     BX = DDT entry number where device ID was found, or total entries
  4983.          plus 1 if port was not found.
  4984.     CF set on error
  4985.     CF clear on success
  4986.         ES:DI buffer filled with DDT entry
  4987. Desc:    the DDT is searched from the specified entry for the device ID in CX,
  4988.       and the first entry in which it is found is returned.
  4989. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
  4990. --------B-15D2-------------------------------
  4991. INT 15 - later PS/2s - RESERVED
  4992.     AH = D2h
  4993.     ???
  4994. Return: ???
  4995. --------B-15D3-------------------------------
  4996. INT 15 - later PS/2s - RESERVED
  4997.     AH = D3h
  4998.     ???
  4999. Return: ???
  5000. --------B-15D4-------------------------------
  5001. INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
  5002.     AH = D4h
  5003.     DL = logical fixed disk drive number
  5004. Return:    AH = return code
  5005.         00h success
  5006.         01h specified logical drive number is invalid
  5007.         86h function not supported
  5008.         80h function not supported (on PCjr and PC)
  5009.     CF set on error
  5010.     CF clear on success
  5011.         AL = physical fixed disk drive number
  5012. --------B-15D5-------------------------------
  5013. INT 15 - later PS/2s - RESERVED
  5014.     AH = D5h
  5015.     ???
  5016. Return: ???
  5017. --------B-15D600BL00-------------------------
  5018. INT 15 - later PS/2s - READ BOOT DEVICE ID
  5019.     AX = D600h
  5020.     BL = 00h
  5021.     DX = device ID
  5022. Return: CF clear if successful
  5023.         AH = 00h
  5024.     CF set on error
  5025.         AH = status (86h for function not supported)
  5026. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
  5027. --------B-15D600BL01-------------------------
  5028. INT 15 - later PS/2s - WRITE BOOT DEVICE ID
  5029.     AX = D600h
  5030.     BL = 01h
  5031.     DX = device ID
  5032. Return: CF clear on success
  5033.         AH = 00h
  5034.     CF set on error
  5035.         AH = status (86h for function not supported)
  5036. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
  5037. --------B-15D601BL00-------------------------
  5038. INT 15 - later PS/2s - READ BOOT DEVICE KEY
  5039.     AX = D601h
  5040.     BL = 00h
  5041.     DX = device ID
  5042. Return: CF clear on success
  5043.         AH = 00h
  5044.     CF set on error
  5045.         AH = status (86h for function not supported)
  5046. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
  5047. --------B-15D601BL01-------------------------
  5048. INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
  5049.     AX = D601h
  5050.     BL = 01h
  5051.     DX = device ID
  5052. Return: CF clear on success
  5053.         AH = 00h
  5054.     CF set on error
  5055.         AH = status (86h for function not supported)
  5056. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
  5057. --------B-15D602-----------------------------
  5058. INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
  5059.     AX = D602h
  5060. Return: CF clear on success
  5061.         AH = 00h
  5062.         AL = status of reference-partition boot request
  5063.         00h boot not requested
  5064.         01h boot requested
  5065.     CF set on error
  5066.         AH = status (86h for function not supported)
  5067. SeeAlso: AX=D601h/BL=00h
  5068. --------X-15D800-----------------------------
  5069. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  5070.     AX = D800h
  5071.     CL = slot number (including embedded and virtual)
  5072. Return: CF clear if successful
  5073.         AH = 00h
  5074.     CF set on error
  5075.         AH = error code
  5076.         80h invalid slot number
  5077.         82h EISA CMOS corrupt
  5078.         83h empty slot
  5079.         86h invalid BIOS-FW function call
  5080.         87h invalid system configuration
  5081.     AL bit flags
  5082.         bit 7: set if duplicate IDs
  5083.         bit 6: set if product ID readable
  5084.         bits 4,5: slot type (00=expansion, 01=embedded, 10=virtual device)
  5085.         bits 0-3: duplicate ID number if bit 7 set
  5086.     BH = major revision level of configuration utility
  5087.     BL = minor revision level of configuration utility
  5088.     CX = checksum of configuration file
  5089.     DH = number of device functions
  5090.     DL = combined function information byte
  5091.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  5092. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  5093. SeeAlso: AX=D801h,AX=D804h
  5094. --------X-15D801-----------------------------
  5095. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  5096.     AX = D801h
  5097.     CH = function number to read
  5098.     CL = slot number (including embedded and virtual)
  5099.     DS:SI -> 320-byte buffer for standard configuration data block
  5100. Return: CF clear if successful
  5101.         AH = 00h
  5102.         DS:SI buffer filled
  5103.     CF set on error
  5104.         AH = error code
  5105.         80h invalid slot number
  5106.         81h invalid function number
  5107.         82h EISA CMOS corrupt
  5108.         83h empty slot
  5109.         86h invalid BIOS-FW function call
  5110.         87h invalid system configuration
  5111.     BX destroyed
  5112. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  5113. --------X-15D802-----------------------------
  5114. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  5115.     AX = D802h
  5116.     BH = EISA config utility major revision level
  5117.     BL = EISA config utility minor revision level
  5118. Return: CF clear if successful
  5119.         AH = 00h
  5120.     CF set on error
  5121.         AH = error code
  5122.         84h error clearing CMOS
  5123.         86h invalid BIOS-FW function call
  5124.         88h config utility version not supported
  5125. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  5126. SeeAlso: AX=D803h
  5127. --------X-15D803-----------------------------
  5128. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  5129.     AX = D803h
  5130.     CX = length of data structure (0000h = empty slot)
  5131.         includes two bytes for config file checksum
  5132.     DS:SI -> configuration data
  5133. Return: CF clear if successful
  5134.         AH = 00h
  5135.     CF set on error
  5136.         AH = error code
  5137.         84h error clearing CMOS
  5138.         85h EISA CMOS is full
  5139.         86h invalid BIOS-FW function call
  5140. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  5141. SeeAlso: AX=D802h
  5142. --------X-15D804-----------------------------
  5143. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  5144.     AX = D804h
  5145.     CL = slot number (including embedded and virtual)
  5146. Return: CF clear if successful
  5147.         AH = 00h
  5148.     CF set on error
  5149.         AH = error code
  5150.         80h invalid slot number
  5151.         83h empty slot
  5152.         86h invalid BIOS-FW function call
  5153.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  5154. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  5155. SeeAlso: AX=D800h
  5156. --------X-15D8-------------------------------
  5157. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  5158.     AH = D8h
  5159.     AL = 80h to 84h
  5160.     other registers as appropriate for AL=00h to 04h
  5161. Return: as appropriate for AL=00h to 04h
  5162. Note:    these functions are identical to AX=D800h to D804h, except that they
  5163.       should be called when using 32-bit CS addressing mode (pointers use
  5164.       ESI rather than SI as offset) instead of 16-bit addressing mode
  5165. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  5166. --------Q-15DE00-----------------------------
  5167. INT 15 - DESQview - GET PROGRAM NAME
  5168.     AX = DE00h
  5169. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  5170.         the "Switch Windows" menu (see below)
  5171. Note:    always returns AX=0000h under DESQview/X
  5172. SeeAlso: AX=DE07h
  5173.  
  5174. Format of program entry in DESQVIEW.DVO:
  5175. Offset    Size    Description
  5176.  00h    BYTE    length of name (FFh if end of file)
  5177.  01h  N BYTEs    name
  5178.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  5179.     BYTE    program type
  5180.         00h normal program
  5181.         04h divider
  5182.         80h Delete a Program
  5183.         81h Change a Program
  5184.     WORD    ??? apparently always 0000h
  5185. --------Q-15DE01-----------------------------
  5186. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  5187.     AX = DE01h
  5188. Return: nothing
  5189. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  5190.     NOP for DESQview/X
  5191. --------Q-15DE02-----------------------------
  5192. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  5193.     AX = DE02h
  5194. Return: nothing
  5195. Note:    this call is a NOP in DV 2.x
  5196. SeeAlso: AX=DE03h
  5197. --------Q-15DE03-----------------------------
  5198. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  5199.     AX = DE03h
  5200. Return: AX = ??? for current window
  5201.     BX = ??? for current window
  5202. Note:    this call is a NOP in DV 2.x
  5203. SeeAlso: AX=DE02h
  5204. --------Q-15DE04-----------------------------
  5205. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  5206.     AX = DE04h
  5207. Return: BX = bytes of common memory available
  5208.     CX = largest block available
  5209.     DX = total common memory in bytes
  5210. SeeAlso: AX=DE05h,AX=DE06h
  5211. --------Q-15DE05-----------------------------
  5212. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  5213.     AX = DE05h
  5214. Return: BX = KB of memory available
  5215.     CX = largest block available
  5216.     DX = total conventional memory in KB
  5217. SeeAlso: AX=DE04h,AX=DE06h
  5218. --------Q-15DE06-----------------------------
  5219. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  5220.     AX = DE06h
  5221. Return: BX = KB of expanded memory available
  5222.     CX = largest block available
  5223.     DX = total expanded memory in KB
  5224. SeeAlso: AX=DE04h,AX=DE05h
  5225. --------Q-15DE07-----------------------------
  5226. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  5227.     AX = DE07h
  5228. Return: AX = number of program as it appears on the "Switch Windows" menu
  5229. Note:    this API call may be made from a hardware interrupt handler
  5230. SeeAlso: AX=DE00h
  5231. --------Q-15DE08-----------------------------
  5232. INT 15 - DESQview - GET ???
  5233.     AX = DE08h
  5234. Return: AX = 0000h if ??? is not set to the current task
  5235.          0001h if ??? is set to the current task
  5236. --------Q-15DE09-----------------------------
  5237. INT 15 - DESQview - UNIMPLEMENTED
  5238.     AX = DE09h
  5239. Return: nothing (NOP in DV 1.x and 2.x)
  5240. --------Q-15DE0A-----------------------------
  5241. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  5242.     AX = DE0Ah
  5243.     BL = character
  5244. Return: character displayed, next call will display in next position (which
  5245.     wraps back to the start of the line if off the right edge of screen)
  5246. Notes:    displays character on bottom line of *physical* screen, regardless
  5247.       of current size of window (even entirely hidden)
  5248.     does not know about graphics display modes, just pokes the characters
  5249.       into display memory
  5250.     this API call may be made from a hardware interrupt handler
  5251. SeeAlso: AX=1003h
  5252. --------Q-15DE0B-----------------------------
  5253. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  5254.     AX = DE0Bh
  5255.     BL = API level minor version number
  5256.     BH = API level major version number
  5257. Return: AX = maximum API level (AH = major, AL = minor)
  5258. Notes:    if the requested API level is greater than the version of DESQview, a
  5259.       "You need a newer version" error window is popped up
  5260.     the API level defaults to 1.00, and is inherited by child tasks
  5261. --------Q-15DE0C-----------------------------
  5262. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  5263.     AX = DE0Ch
  5264.     BX = number of bytes
  5265. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  5266. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  5267.       system memory
  5268. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  5269. --------Q-15DE0D-----------------------------
  5270. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  5271.     AX = DE0Dh
  5272.     ES:DI -> previously allocated block
  5273. Return: nothing
  5274. SeeAlso: AX=1002h,AX=DE0Ch
  5275. --------Q-15DE0E-----------------------------
  5276. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  5277.     AX = DE0Eh
  5278.     ES:DI -> name to find
  5279.     CX = length of name
  5280. Return: BX = 0000h not found
  5281.          0001h found
  5282.         DS:SI = object handle
  5283. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1200h"GETNAME"
  5284.  
  5285. Special mailbox names:
  5286.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  5287.  "DESQview/X Help Engine"
  5288.  "DESQview/X Network Server"  Network Manager
  5289.  "DESQview X Server0"    X-Windows server
  5290.  "DESQview X Server7"    X-Windows printing service
  5291.  "INBOX"        DESQview/X LPD requests
  5292.  "OUTBOX"        DESQview/X LPD responses
  5293.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  5294.  "_DVNM_"        DV/X v1.10 network manager
  5295. --------Q-15DE0F-----------------------------
  5296. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  5297.     AX = DE0Fh
  5298. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  5299. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  5300.     enables an additional mouse mode
  5301. --------Q-15DE10-----------------------------
  5302. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  5303.     AX = DE10h
  5304.     BH = scan code
  5305.     BL = character
  5306. Return: nothing
  5307. Notes:    a later read will get the keystroke as if it had been typed by the user
  5308.     multiple pushes are read last-in first-out
  5309.     if a script exists for the pushed key in the current application, the
  5310.       script will be executed
  5311.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  5312. SeeAlso: INT 16/AH=05h
  5313. --------Q-15DE11BL00-------------------------
  5314. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  5315.     AX = DE11h
  5316.     BL = 00h      viewport will not move automatically
  5317.          nonzero  viewport will move to keep cursor visible (default)
  5318. Return: nothing
  5319. --------Q-15DE12BX0000-----------------------
  5320. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  5321.     AX = DE12h
  5322.     BX = 0000h    select normal style (linefeed only moves down)
  5323.          nonzero  select C style (linefeed moves to start of next line)
  5324. Return: nothing
  5325. Note:    set on a per-task basis, and inherited from the parent task
  5326. --------Q-15DE13-----------------------------
  5327. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  5328.     AX = DE13h
  5329. Return: BX = number of calls to BEGINC or ENTERC (see INT 15/AX=101Bh,DE1Ch)
  5330.          without matching ENDC (see INT 15/AX=101Ch)
  5331. Note:    this API call may be made from within a hardware interrupt handler
  5332. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  5333. --------Q-15DE14-----------------------------
  5334. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  5335.     AX = DE14h
  5336.     ES:DI -> object
  5337. Return: BL = 00h not an object
  5338.          08h window or task
  5339.          09h mailbox
  5340.          0Ah keyboard
  5341.          0Bh timer
  5342.          0Ch objectq
  5343.          0Fh pointer
  5344.          10h panel
  5345. SeeAlso: AX=1016h
  5346. --------Q-15DE15-----------------------------
  5347. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  5348.     AX = DE15h
  5349.     BL = error handling mode
  5350.         00h post system error on all error conditions
  5351.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  5352.         messages sent to mailboxes which fail due to lack of system
  5353.         or common memory
  5354.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  5355.         calls which fail due to lack of system memory
  5356. Return: nothing
  5357. SeeAlso: AX=DE0Ch,AX=DE16h
  5358. --------Q-15DE16-----------------------------
  5359. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  5360.     AX = DE16h
  5361. Return: BL = current mode
  5362.         00h always post system error
  5363.         01h return carry flag set on failed mailbox writes
  5364.         02h return CF set on failed mailbox writes and NULL on failed
  5365.         GETMEM calls
  5366. SeeAlso: AX=DE15h
  5367. --------Q-15DE17-----------------------------
  5368. INT 15 - DESQview v2.20-2.25 - reserved
  5369.     AX = DE17h
  5370. Return: pops up "Programming error" window
  5371. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  5372. SeeAlso: AX=1117h
  5373. --------Q-15DE17-----------------------------
  5374. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  5375.     AX = DE17h
  5376.     BX = function
  5377.         0000h   get current mapping context without setting
  5378.         nonzero set new mapping context to BX
  5379. Return: BX = mapping context in effect before call
  5380. Notes:    mapping contexts determine conventional-memory addressability; setting
  5381.       a mapping context ensures that the associated program and data areas
  5382.       are in memory for access.  Usable by drivers, TSRs and shared
  5383.       programs.
  5384.     caller need not be running under DESQview
  5385.     this API call may be made from a hardware interrupt handler
  5386. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  5387. --------Q-15DE18-----------------------------
  5388. INT 15 - DESQview v2.20+ - internal - ???
  5389.     AX = DE18h
  5390.     BP = function number
  5391.         high byte must be 10h
  5392.         low byte is function
  5393.         00h set ???
  5394.             BL = ???  (00h-10h, video mode???)
  5395.             BH = value to store
  5396.         03h set ???
  5397.             BL = ??? (stored in driver)
  5398.         0Ah get ???
  5399.             ES:DI -> 18-byte buffer to hold ???
  5400. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  5401. --------Q-15DE19-----------------------------
  5402. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  5403.     AX = DE19h
  5404.     BX = number of bytes to allocate
  5405. Return: AX = 0000h successful
  5406.         ES:DI -> allocated block
  5407.          nonzero insufficient memory
  5408. Note:    this API call may be made from within a hardware interrupt handler
  5409. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  5410. --------Q-15DE1A-----------------------------
  5411. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  5412.     AX = DE1Ah
  5413.     ES:DI -> previously allocated block
  5414. Return:    AX = 0000h (successful)
  5415. Note:    this function may be called from within a hardware interrupt handler
  5416. SeeAlso: AX=DE0Dh,AX=DE19h
  5417. --------Q-15DE1B-----------------------------
  5418. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  5419.     AX = DE1Bh
  5420. Return: nothing
  5421. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  5422. --------Q-15DE1C-----------------------------
  5423. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  5424.     AX = DE1Ch
  5425. Return: nothing
  5426. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  5427.       that DOS is free
  5428.     the official documentation states that this call should be paired with
  5429.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  5430.     this API call may be made from within a hardware interrupt handler
  5431. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  5432. --------Q-15DE1D-----------------------------
  5433. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  5434.     AX = DE1Dh
  5435.     DX = segment of handle for task to receive keystroke
  5436.     BL = character
  5437.     BH = scan code
  5438. Return: AX = 0000h if successful
  5439.        nonzero if receiver's keyboard buffer was full
  5440. Notes:    the key is treated as though the user had pressed it, ignoring any
  5441.       script which may be bound to the key, and using the current field
  5442.       table if the keyboard object is in field processing mode
  5443.     multiple PUTKEYs are seen in the order in which they are executed
  5444. SeeAlso: AX=DE10h
  5445. --------Q-15DE1E-----------------------------
  5446. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  5447.     AX = DE1Eh
  5448. Return: CL = actual number of rows on screen
  5449.     CH = actual number of columns on screen
  5450.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  5451. Note:    this API call may be made from a hardware interrupt handler
  5452. SeeAlso: INT 10/AH=0Fh
  5453. --------Q-15DE1F-----------------------------
  5454. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  5455.     AX = DE1Fh
  5456. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  5457. Note:    this API call may be made from within a hardware interrupt handler
  5458. SeeAlso: AX=DE13h,INT 21/AH=34h
  5459. --------Q-15DE20-----------------------------
  5460. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  5461.     AX = DE20h
  5462.     BX = segment of handle of task to interupt
  5463.     DX:CX -> FAR interrupt routine
  5464.     BP,SI,DI,DS,ES as required by interrupt routine
  5465. Return: nothing
  5466. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  5467.       making the DISPATCHINT call
  5468.     multiple "DISPATCHINT" calls are processed in the order in which they
  5469.       were executed
  5470.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  5471.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  5472.       needs to be preserved
  5473.     this API call may be made from within a hardware interrupt handler
  5474. SeeAlso: AX=1021h,AX=DE2Ah
  5475. --------Q-15DE21-----------------------------
  5476. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  5477.     AX = DE21h
  5478.     BX = new state
  5479.         0000h turn off
  5480.         nonzero turn on
  5481. Return: BX = old state of virtualization
  5482. Notes:    this API call may be made from within a hardware interrupt handler
  5483.     under DV 2.40 and 2.42, this call appears to have no effect and always
  5484.       returns a nonzero value in BX which appears to be the offset within
  5485.       the DV common memory segment of the caller's task object; it may
  5486.       only have an effect within a hardware interrupt handler
  5487. SeeAlso: AX=1117h,AX=DE17h
  5488. --------Q-15DE22-----------------------------
  5489. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  5490.     AX = DE22h
  5491.     DX = segment of task handle
  5492. Return: DX = total amount of memory in paragraphs
  5493.     BX = amount of system memory in paragraphs
  5494.     CX = largest block of system memory available in paragraphs
  5495.     AX = flags
  5496.         bit 0: system memory resides in shared memory
  5497.         bit 1: process's memory is swapped out
  5498.         bit 2: process's system memory is swapped out
  5499. Notes:    if the task handle is a child task, the returned values will be for the
  5500.       process containing the task, rather than the task itself
  5501.     if the process's system memory is swapped out, BX,CX,DX remain
  5502.       unchanged, because the memory usage cannot be determined
  5503. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  5504. --------Q-15DE23-----------------------------
  5505. INT 15 U - DESQview v2.31+ - ???
  5506.     AX = DE23h
  5507.     BX = ??? IRQ number on first PIC?
  5508.     CX = ??? IRQ number on second PIC?
  5509. Return: ???
  5510. Note:    called by QEMM 6.00+
  5511. --------Q-15DE24-----------------------------
  5512. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  5513.     AX = DE24h
  5514.     BX = length of .DVP data
  5515.     CX = length of ??? string
  5516.     DS:SI -> ??? string
  5517.     ES:DI -> .DVP data (see AX=102Ch)
  5518. Return: BX = segment of task handle??? or 0000h on error
  5519. Note:    this call is similar to AX=102Ch except that it can interpret the
  5520.       extended DVP data
  5521. SeeAlso: AX=102Ch
  5522. --------Q-15DE25-----------------------------
  5523. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  5524.     AX = DE25h
  5525.     ES:DI -> 67-byte buffer for ASCIZ directory name
  5526. Return: ES:DI buffer filled with directory from which DESQview was started
  5527. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  5528.       name, so if the buffer is not cleared to zeros before the call,
  5529.       there is no way to tell where the directory name ends.  This bug
  5530.       has been fixed in DV 2.52 (DV/X 1.02)
  5531. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  5532. --------Q-15DE26-----------------------------
  5533. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  5534.     AX = DE26h
  5535. Return: BX = segment of handle for task with keyboard focus
  5536. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  5537.       "direct" window is active
  5538. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  5539. --------Q-15DE27-----------------------------
  5540. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  5541.     AX = DE27h
  5542.     BX = type
  5543.         0000h process
  5544.         0001h task
  5545.     ES:DI -> list of Instance Item Structures (see below)
  5546. Return: CF clear if successful
  5547.         AX = ???
  5548.         BX = ???
  5549.     CF set on error
  5550.         AX = error code???
  5551.         0004h invalid BX value
  5552. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5553. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  5554.  
  5555. Format of Instance Item Structure [one element of list]:
  5556. Offset    Size    Description
  5557.  00h    WORD    length of data area DESQview should save and restore on context
  5558.         switches (0000h = end of list)
  5559.  02h    DWORD    pointer to area to be saved/restored
  5560. --------Q-15DE28-----------------------------
  5561. INT 15 U - DESQview v2.50+ - ???
  5562.     AX = DE28h
  5563.     BX = segment of ??? or 0000h for default
  5564.     ???
  5565. Return: ???
  5566. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5567. SeeAlso: AX=DE2Ah
  5568. --------Q-15DE29BX0000-----------------------
  5569. INT 15 U - DESQview v2.50+ - ???
  5570.     AX = DE29h
  5571.     BX = 0000h
  5572.     ???
  5573. Return: CF clear if successful
  5574.         ???
  5575.     CF set on error
  5576. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5577. --------Q-15DE29BX0001-----------------------
  5578. INT 15 U - DESQview v2.50+ - ???
  5579.     AX = DE29h
  5580.     BX = 0001h
  5581.     DX = segment of window handle
  5582. Return: CF clear if successful
  5583.         AX = ???
  5584.         DX = ???
  5585.     CF set on error
  5586. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5587. --------Q-15DE29BX0002-----------------------
  5588. INT 15 U - DESQview v2.50+ - ???
  5589.     AX = DE29h
  5590.     BX = 0002h
  5591.     DX = segment of window handle
  5592. Return: CF clear if successful
  5593.         AX = ???
  5594.         DX = ???
  5595.     CF set on error
  5596. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5597. --------Q-15DE29BX0003-----------------------
  5598. INT 15 U - DESQview v2.50+ - ???
  5599.     AX = DE29h
  5600.     BX = 0003h
  5601.     DX = segment of window handle
  5602. Return: CF clear if successful
  5603.         ???
  5604.     CF set on error
  5605. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5606. --------Q-15DE29BX0004-----------------------
  5607. INT 15 U - DESQview v2.50+ - GET DISPLAY NAME
  5608.     AX = DE29h
  5609.     BX = 0004h
  5610.     CX = size of buffer in bytes
  5611.     DX = segment of window handle
  5612.     ES:DI -> buffer for display name
  5613. Return: CF clear if successful
  5614.         buffer filled with ASCIZ display name (truncated if necessary) or
  5615.           null string if no display
  5616.     CF set on error
  5617. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5618.     the name ":0" refers to the local display
  5619. --------Q-15DE29BX0005-----------------------
  5620. INT 15 U - DESQview v2.50+ - ???
  5621.     AX = DE29h
  5622.     BX = 0005h
  5623.     ???
  5624. Return: CF clear if successful
  5625.         ???
  5626.     CF set on error
  5627. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5628. --------Q-15DE2A-----------------------------
  5629. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  5630.     AX = DE2Ah
  5631.     BX = segment of handle for task to interrupt or 0000h for caller
  5632.     DX:CX -> interrupt routine
  5633.     BP,SI,DI,DS,ES as required by interrupt routine
  5634. Return: nothing
  5635. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5636.     this call is the same as AX=DE20h except that it will delay
  5637.       interrupting the specified task until after it has exited DOS
  5638. SeeAlso: AX=1021h,AX=DE20h
  5639. --------Q-15DE2B-----------------------------
  5640. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  5641.     AX = DE2Bh
  5642.     ES:DI -> starting object
  5643.         0000h:0000h for first object in list???
  5644. Return: AX = status
  5645.         0000h successful
  5646.         ES:DI -> next object of same type (window/non-window)
  5647.         0001h failed (ES:DI was not a valid handle)
  5648. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5649.     there are two separate lists, one for window/task objects and one
  5650.       for all other objects
  5651. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  5652. --------Q-15DE2C-----------------------------
  5653. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  5654.     AX = DE2Ch
  5655.     DX = window information format version (0100h for DESQview 2.5x)
  5656.     BX = segment of window handle or 0000h for default
  5657.     ES:DI -> buffer for window information (see below)
  5658. Return: AX = status
  5659.         0000h successful
  5660. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5661. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  5662.  
  5663. Format of window information:
  5664. Offset    Size    Description
  5665.  00h    BYTE    task flag: 00h window, 01h task
  5666.  01h    BYTE    process number if owner task
  5667.         00h if non-owner task
  5668.  02h    WORD    segment of owner's handle, 0000h if orphaned
  5669.  04h    WORD    mapping context (see AX=1016h)
  5670.  06h    BYTE    task status (see below)
  5671.  07h    BYTE    unused
  5672.  08h    WORD    status bits (see below)
  5673.  0Ah    BYTE    01h if foreground-only window
  5674.  
  5675. Values for task status:
  5676.  00h    "Waiting" waiting for input
  5677.  01h    "Idle" keyboard poll limit reached
  5678.  03h    same as 01h
  5679.  04h    "Pausing" INT 15/AX=1000h pause called
  5680.  04h    DV/X direct: user did something to allow task switch
  5681.  05h    "ModeChg" video mode about to be changed
  5682.  06h    "ModeNtf" notify that video mode changed
  5683.  07h    "MoniCh" requested change to other monitor
  5684.  08h    "StartPgm" control relinquished to start new process
  5685.  09h    "MgrCan" made window manager CANCEL command
  5686.  0Ah    "Slicing" time slice expired
  5687.  0Bh    "Exit DOS" notify on DOS calls
  5688.  0Ch    "Enter DOS" process is re-entering DOS
  5689.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  5690.  0Eh    "BrkNxt" Control-Break pressed
  5691.  0Fh    "MgrCol" keyboard focus taken away
  5692.  10h    "PgmInt" interrupted by API call from another task
  5693.  11h    "BldOpen" call to INT 15/AX=DE01h
  5694.  
  5695. Bitfields for status bits:
  5696.  bit 0    DESQview process
  5697.  bit 1    process swapped out
  5698.  bit 2    process is resized direct window (suspended)
  5699.  bit 3    process suspended itself
  5700.  bit 4    user suspended process
  5701.  bit 5    process is being created
  5702.  bit 6    task is freeing another task
  5703. --------Q-15DE2D-----------------------------
  5704. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  5705.     AX = DE2Dh
  5706.     CX = direction
  5707.         FFFFh set socket handler
  5708.         DX:BX -> FAR function for socket interface
  5709.             must be of the format described under INT 63"DESQview"
  5710.         other get socket handler
  5711.         Return: DX:BX -> socket handler
  5712. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5713.     the "set" subfunction is normally called only by SOCKET.DVR
  5714. SeeAlso: AX=DE2Eh,INT 63"DESQview"
  5715. --------Q-15DE2E-----------------------------
  5716. INT 15 U - DESQview v2.50+ - SOCKET API
  5717.     AX = DE2Eh
  5718.     DX:BX -> socket record or 0000h:0000h to create a new socket record
  5719. Return: CX = size of socket record in bytes
  5720.     DX:BX -> socket record which was used
  5721. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  5722.     socket records are allocated from common memory
  5723.     for Unix compatibility, each socket and connection on a socket is
  5724.       allocated a DOS file handle (referencing an SFT for NUL) which is
  5725.       used on various calls to specify which of possibly multiple
  5726.       connections is to be operated upon
  5727. SeeAlso: AX=DE2Dh,INT 61/AX=0001h"VINES",INT 63"DESQview"
  5728.  
  5729. Values for function number:
  5730.  0000h    initialize socket???
  5731.  0001h    "gethostname"
  5732.  0002h    "ioctl" check for input
  5733.  0003h    "sleep" delay for specified period
  5734.  0004h    "htons" convert word to network (big-endian) byte order
  5735.  0005h    "select"
  5736.  0006h    "bsd_close"/"so_close" close socket
  5737.  0007h    NOP
  5738.  0008h    "connect" initiate connection on socket
  5739.  0009h    "recv"/"recvfrom" read from socket
  5740.  000Ah    "socket"
  5741.  000Bh    ???
  5742.  000Ch    "gethostbyname"
  5743.  000Dh    "send"/"sendto" write to socket
  5744.  000Eh    ??? (does something to all connections for process)
  5745.  000Fh    "getpid" get process identifier
  5746.  0010h    "gettimeofday"
  5747.  0011h    "bind" assign name to socket
  5748.  0012h    "listen" listen for connections on socket
  5749.  0013h    "accept" accept connection on socket
  5750.  0014h    connect to X server
  5751.  0015h    "gethostbyaddr" get host information for an address
  5752.  0016h    "getprotobyname"
  5753.  0017h    "getprotobynumber"
  5754.  0018h    "getservbyname"
  5755.  0019h    "getservbyport"
  5756.  001Ah    "getsockname" determine name bound to socket
  5757.  001Bh    "getpeername" get name of connected peer
  5758.  001Ch    "getsockopt"/"setsockopt"
  5759.  001Dh    "so_exit"     close all sockets for calling process
  5760.  001Eh    "issock" determine whether file handle references socket
  5761.  001Fh    "so_attach" reattach previously detached socket
  5762.  0020h    "so_detach" temporarily detach socket
  5763.  0021h    get DESQview directory
  5764.  0022h    "NewProc" start new application (see AX=102Ch)
  5765.  0023h    "so_linkup"
  5766.  0024h    canonicalize filename
  5767.  0025h    indirect INT 15h call
  5768.  0026h    Network Manager interface
  5769.  0027h    "so_unlink"    close connection from "so_linkup"
  5770.  0028h    "raisepriority"
  5771.  0029h    "lowerpriority"
  5772.  002Ah    ???
  5773.  FFFFh    "NetExit" (appears to be a NOP)
  5774.  
  5775. Format of socket record:
  5776. Offset    Size    Description
  5777.  00h    WORD    signature F0ADh
  5778.  02h    WORD    function number (see above)
  5779.  04h    WORD    returned error code (see below)
  5780.  06h    WORD    maximum message size??? (usually 0400h)
  5781.  08h    WORD    PSP segment to use or 0000h if socket not valid
  5782.  0Ah    WORD    scratch space (JFT size)
  5783.  0Ch    DWORD    scratch space (JFT address)
  5784.  10h    DWORD    mailbox handle (initialized by function 0000h)
  5785.  14h    DWORD    timer object handle (initialized by function 0000h)
  5786. ---function 0000h---
  5787.  18h    WORD    (return) ???
  5788. ---function 0001h---
  5789.  18h    WORD    (return) status???
  5790.  1Ah 128 BYTEs    (return) ASCIZ hostname (empty string if not on network)
  5791.  9Ah    WORD    maximum length of hostname to return
  5792. ---function 0002h---
  5793.  18h    WORD    (return) status
  5794.  1Ah    WORD    socket's file handle
  5795.  1Ch    WORD    IOCTL function
  5796.         05h "FIONREAD" determine available input
  5797.         06h "FIONBIO" set blocking state of socket
  5798.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  5799.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  5800. ---function 0003h---
  5801.  18h  2 BYTEs    unused
  5802.  1Ah    WORD    delay time in seconds
  5803. ---function 0004h---
  5804.  18h    WORD    (return) result in network (big-endian) byte order
  5805.  1Ah    WORD    value to convert to network byte order
  5806. ---function 0005h---
  5807.  18h    WORD    (return) number of handles meeting the specified conditions???
  5808.  1Ah    WORD    number of file handles in each bitset???
  5809.  1Ch    DWORD    bitset of socket handles to check for readability???
  5810.  20h    DWORD    bitset of socket handles to check for writability???
  5811.  24h    DWORD    bitset of socket handles to check for errors???
  5812.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  5813.  2Ah    DWORD    ???
  5814.  2Eh    DWORD    ???
  5815. ---function 0006h---
  5816.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5817.  1Ah    WORD    socket's file handle
  5818. ---function 0008h---
  5819.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5820.  1Ah    WORD    socket's file handle
  5821.  1Ch    WORD    0001h if socket name specified, 0000h if not
  5822.  1Eh    WORD    length of socket name
  5823.  20h  N BYTEs    name of socket to which to connect
  5824. ---function 0009h---
  5825.  18h    WORD    (return) number of bytes actually read, 0000h if connection
  5826.             closed, or FFFFh on error
  5827.  1Ah    WORD    socket's file handle
  5828.  1Ch    WORD    number of bytes to read
  5829.  1Eh    WORD    flags
  5830.  20h    WORD    0000h if no source address desired
  5831.         0001h if source address is to be stored (datagram sockets)
  5832.  22h    WORD    length of source address
  5833.  24h 110 BYTEs    source address
  5834.  92h 1K BYTEs    buffer for data to be read
  5835. ---function 000Ah---
  5836.  18h    WORD    (return) socket's file handle or FFFFh on error
  5837.  1Ah    WORD    address family (0001h,0002h)
  5838.  1Ch    WORD    socket type
  5839.  1Eh    WORD    protocol
  5840. ---function 000Bh---
  5841.  18h    WORD    (return) 0001h if ??? or FFFFh on error
  5842.  1Ah    WORD    socket's file handle
  5843.  1Eh    WORD    (call) ???
  5844. ---function 000Ch---
  5845.  18h 128 BYTEs    buffer containing ASCIZ hostname
  5846.         special case if empty string or "unix"
  5847.  98h    ???    'struct hostent' ???
  5848.  A2h    ???    (return) ???
  5849. ---function 000Dh---
  5850.  18h    WORD    (return) number of bytes actually written or FFFFh on error
  5851.  1Ah    WORD    socket's file handle
  5852.  1Ch    WORD    number of bytes to write
  5853.  1Eh    WORD    number of bytes to follow in subsequent writes???
  5854.  20h    WORD    flags
  5855.  22h    WORD    0000h if no destination specified, 0001h if destination present
  5856.  24h    WORD    ???
  5857.  26h    WORD    length of destination address
  5858.  28h 110 BYTEs    destination address
  5859.  96h 1K BYTEs    buffer containing data to be written
  5860. ---function 000Eh---
  5861.  no additional fields
  5862. ---function 000Fh---
  5863.  18h    DWORD    (return) DESQview task handle of calling process
  5864. ---function 0010h---
  5865.  18h    DWORD    (return) current time
  5866.  1Ch    DWORD    (return) ???
  5867. ---function 0011h---
  5868.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5869.  1Ah    WORD    socket's file handle
  5870.  1Ch    WORD    length of name
  5871.  1Eh  N BYTEs    buffer for socket name
  5872. ---function 0012h---
  5873.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5874.  1Ah    WORD    socket's file handle
  5875.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  5876. ---function 0013h---
  5877.  18h    WORD    (return) file handle for new connection or FFFFh on error
  5878.  1Ah    WORD    listen()ing socket's file handle
  5879.  1Ch    WORD    (call) length of buffer for connecting entity's address
  5880.         (return) actual length of address
  5881.  1Eh  N BYTEs    buffer for connecting entity's address
  5882. ---function 0014h---
  5883.  18h    WORD    (return) socket's file handle or FFFFh on error
  5884.  1Ah  4 BYTEs    (return) ???
  5885.  1Eh    WORD    (return) ???
  5886.  20h    WORD    (return) ???
  5887.  22h 256 BYTEs    ASCIZ X display name
  5888. 122h    ???
  5889. ---function 0015h---
  5890.  18h    WORD    (call) type of address??? (test for 0001h seen)
  5891.  1Ah    WORD    (call) length of buffer for host address
  5892.  1Ch 110 BYTEs    buffer containing host address
  5893.  8Ah    WORD    (return) offset of official host name???
  5894.  8Ch    WORD    (return) offset of alias list???
  5895.  8Eh    WORD    (return) address type???
  5896.  90h    WORD    (return) length of an address in bytes???
  5897.  92h    WORD    (return) offset of address???
  5898.  9Ah  N BYTEs    (return) ??? buffer for hostname, alias list, and host address
  5899. ---function 0016h---
  5900.  18h    ???    buffer for protocol name???
  5901.  98h    ???
  5902. ---function 0017h---
  5903.  18h    WORD    (call) protocol number???
  5904.  1Ah    WORD    (return) ??? or 0001h
  5905. ---function 0018h---
  5906.  18h 128 BYTEs    buffer containing ???
  5907.  98h 128 BYTEs    buffer containing ???
  5908. 118h    WORD    (return) ???
  5909. ---function 0019h---
  5910.  18h    WORD    length of name???
  5911.  1Ah 128 BYTEs    buffer for name???
  5912.  9Ah    WORD    (return) ???
  5913. ---function 001Ah---
  5914.  18h    WORD    (return) 0000h if successful, FFFFh on error
  5915.  1Ah    WORD    socket's file handle
  5916.  1Ch    WORD    (call) length of buffer for socket name
  5917.         (return) actual length of socket name
  5918.  1Eh  N BYTEs    buffer for socket name
  5919. ---function 001Bh---
  5920.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5921.  1Ah    WORD    socket's file handle
  5922.  1Ch    WORD    (call) size of buffer for name
  5923.         (return) actual size of name
  5924.  1Eh  N BYTEs    buffer for peer's name
  5925. ---function 001Ch---
  5926.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5927.  1Ah    WORD    direction: 0000h to get, 0001h to set
  5928.  1Ch    WORD    socket's file handle
  5929.  1Eh    WORD    option level
  5930.  20h    WORD    option name
  5931.  22h    WORD    (call) length of buffer for option value
  5932.         (return) actual length of option value
  5933.  24h  N BYTEs    buffer for option value
  5934. ---function 001Dh---
  5935.  no additional fields
  5936. ---function 001Eh---
  5937.  18h    WORD    (return) status: 0000h ??? or 0001h ???
  5938.  1Ah    WORD    file handle which may or may not be a socket
  5939. ---function 001Fh---
  5940.  18h    WORD    (return) file handle or FFFFh on error
  5941.  1Ah    DWORD    (call) pointer to Socket Context Record (see below) of a
  5942.             previously detached socket
  5943. ---function 0020h---
  5944.  18h    WORD    (return) status: 0000h if successful or FFFFh on error
  5945.  1Ah    WORD    socket's file handle
  5946.  1Ch    DWORD    (return) pointer to Socket Context Record (see below) for
  5947.             the file handle
  5948. ---function 0021h---
  5949.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  5950. ---function 0022h---
  5951.  18h    DWORD    (return) task handle of new application
  5952.  1Ch    WORD    size of .DVP data
  5953.  1Eh 129 BYTEs    ASCIZ ???
  5954.  9Fh  N BYTEs    .DVP data (see AX=102Ch)
  5955. ---function 0023h---
  5956.  18h    WORD    (return) ??? or FFFFh on error
  5957.  1Ah    WORD    socket's file handle???
  5958. ---function 0024h---
  5959.  18h    WORD    (return) DOS error code (see INT 21/AH=59h)
  5960.             0000h if successful
  5961.  1Ah 129 BYTEs    ASCIZ filename/pathname
  5962. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  5963. ---function 0025h---
  5964.  18h    WORD    value of AX
  5965.  1Ah    WORD    value of BX
  5966.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  5967.         (call) number of stack parameters if AH value is 12h
  5968.         (return) returned CX for calls other than INT 15/AH=12h
  5969.  1Eh    WORD    value of DX
  5970.  20h    WORD    value of DI
  5971.  22h    WORD    value of SI
  5972.  24h    WORD    value of DS
  5973.  26h    WORD    value of ES
  5974.  28h    WORD    (return) value of FLAGS after call
  5975.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  5976.         (return) stack results from INT 15/AH=12h call
  5977. ---function 0026h---
  5978.  18h    WORD    (call) Network Manager subfunction (see below)
  5979.         (return) status???
  5980.  1Ah    WORD    (call) size of parameter data
  5981.         (return) size of returned data
  5982.  1Ch  N BYTEs    (call) parameter data required by call (see below)
  5983.         (return) result data (see below)
  5984. ---function 0027h---
  5985.  18h    WORD    (return) status: 0000h if successful, FFFFh on error
  5986.  1Ah    WORD    socket's file handle
  5987. ---functions 0028h,0029h---
  5988.  18h    WORD    (call) file handle for which to set priority low/high
  5989.             FFFFh to change calling task's priority
  5990. ---function 002Ah---
  5991.  no additional fields
  5992.  
  5993. Values for Network Manager subfunction:
  5994.  0004h    "so_exit"???
  5995.  0005h    "gethostbyname"
  5996.  0006h    "gethostname"
  5997.  0009h    "socket"
  5998.  000Dh    "gethostbyaddr"
  5999.  000Fh    "getprotobyname"
  6000.  0010h    get protocol name for protocol number
  6001.  0011h    "getservbyname"
  6002.  0012h    "getservbyport"
  6003.  0013h    "getsockname"???
  6004.  0016h    ???
  6005.  0017h    kill Network Manager
  6006.  0018h    "getpeername"???
  6007.  0019h    ??? (called by socket function 0000h)
  6008.  001Ah    ???
  6009.  001Bh    "so_linkup"
  6010.  001Dh    get network services
  6011.  001Fh    "getpwuid"
  6012.  0020h    "getpwnam"
  6013.  0021h    "getpwvar"
  6014.  0022h    "crypt"
  6015.  0023h    "so_unlink"
  6016.  0024h    "getlogin"
  6017.  0028h    "sethostent"
  6018.  0029h    "gethostent"
  6019.  002Ah    "soaddhost"
  6020.  002Bh    "soupdatehost"
  6021.  002Ch    "sodeletehost"
  6022.  002Dh    "setservent"
  6023.  002Eh    "getservent"
  6024.  002Fh    "setpwent"
  6025.  0030h    "getpwent"
  6026.  0031h    ???
  6027.  0032h    ???
  6028.  0033h    ???
  6029.  0034h    get IP network number
  6030.  0035h    ??? (pops up Network Manager window)
  6031.  0037h    ???
  6032.  0038h    get machine name and IP address
  6033.  0039h    ???
  6034.  
  6035. Format of Function 0026h/Subfunction 000Fh data:
  6036. Offset    Size    Description
  6037.  00h  8 BYTEs    (return) ???
  6038.  
  6039. Format of Function 0026h/Subfunction 0010h data:
  6040. Offset    Size    Description
  6041.  00h  2 BYTEs    (return) ???
  6042.  02h    WORD    (return) protocol number
  6043.  04h    WORD    (call) protocol number for which to get name
  6044.  06h    WORD    (return) ???
  6045.  08h    var    (return) ASCIZ protocol name
  6046.  N    var    (return) ASCIZ protocol name
  6047.  
  6048. Format of Function 0026h/Subfunction 0011h data:
  6049. Offset    Size    Description
  6050.  00h  8 BYTEs    ???
  6051.  08h    var    (return) ASCIZ protocol name
  6052.     var    (return) ASCIZ ??? name
  6053.     var    (return) ASCIZ ??? name
  6054.  
  6055. Format of Function 0026h/Subfunction 0012h data:
  6056. Offset    Size    Description
  6057.  00h  8 BYTEs    (return) ???
  6058.  
  6059. Format of Function 0026h/Subfunction 0013h data:
  6060. Offset    Size    Description
  6061.  00h 116 BYTEs    (return) ???
  6062.  
  6063. Format of Function 0026h/Subfunction 0016h data:
  6064. Offset    Size    Description
  6065.  00h  4 BYTEs    (return) ???
  6066.  
  6067. Format of Function 0026h/Subfunction 0018h data:
  6068. Offset    Size    Description
  6069.  00h 116 BYTEs    (return) ???
  6070.  
  6071. Format of Function 0026h/Subfunction 0019h data:
  6072. Offset    Size    Description
  6073.  00h  4 BYTEs    (return) ???
  6074.  04h    DWORD    (return) task handle of ???
  6075.  
  6076. Format of Function 0026h/Subfunction 001Ah data:
  6077. Offset    Size    Description
  6078.  00h 38 BYTEs    (return) ???
  6079.  
  6080. Format of Function 0026h/Subfunction 001Bh data:
  6081. Offset    Size    Description
  6082.  00h 10 BYTEs    (return) ???
  6083.  
  6084. Format of Function 0026h/Subfunction 001Dh return data [array]:
  6085. Offset    Size    Description
  6086.  00h    WORD    ??? or FFFFh if end of array
  6087.  02h  7 BYTEs    ???
  6088.  09h 27 BYTEs    ASCIZ name of service
  6089.  
  6090. Format of Function 0026h/Subfunction 0024h return data:
  6091. Offset    Size    Description
  6092.  00h    var    ASCIZ username
  6093.  
  6094. Format of Function 0026h/Subfunction 0030h data:
  6095. Offset    Size    Description
  6096.  00h    WORD    (call) UID or 0000h for current user
  6097.         (return) ???
  6098.  02h    WORD    (return) UID
  6099.  04h  6 BYTEs    (return) ???
  6100.  0Ah    var    (return) ASCIZ username
  6101.     var    (return) ASCIZ encrypted password
  6102.     var    (return) ASCIZ initial ("home") directory
  6103.  
  6104. Format of Function 0026h/Subfunction 0034h data:
  6105. Offset    Size    Description
  6106.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  6107.  
  6108. Format of Function 0026h/Subfunction 0038h return data:
  6109. Offset    Size    Description
  6110.  00h    BYTE    ???
  6111.  01h  4 BYTEs    IP address
  6112.  05h    var    ASCIZ machine name
  6113.     ???
  6114.  
  6115. Values for error code:
  6116.  0000h    successful
  6117.  0009h    "BADF" bad file handle
  6118.  000Ch    "ENOMEM" out of memory
  6119.  000Eh    "EFAULT" bad address
  6120.  0016h    "EINVAL" invalid argument
  6121.  0018h    "EMFILE" too many open files
  6122.  0020h    "EPIPE" ??? broken pipe
  6123.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  6124.  0024h    "EINPROGRESS" operation now in progress
  6125.  0026h    "ENOTSOCK" socket invalid
  6126.  0028h    "EMSGSIZE" message too long to send atomically
  6127.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  6128.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  6129.  0031h    "EDOM" argument too large
  6130.  0038h    "EISCONN" socket is already connected
  6131.  0039h    "ENOTCONN" socket is not connected
  6132.  
  6133. Format of Socket Context Record:
  6134. Offset    Size    Description
  6135.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  6136.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  6137.  06h    WORD    PSP segment of owner or 0000h
  6138.  08h    WORD    mapping context of owning window (see AX=1016h)
  6139.  0Ah  2 BYTEs    ???
  6140.  0Ch    WORD    address family
  6141.  0Eh    WORD    socket type
  6142.  10h    WORD    protocol
  6143.  12h    WORD    socket state
  6144.         0001h created
  6145.         0002h bound
  6146.         0003h listening???
  6147.         0005h connected
  6148.  14h    DWORD    timer object handle
  6149.  18h    DWORD    object handle (mailbox???)
  6150.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  6151.  20h    DWORD    pointer to ??? or 0000h
  6152.  24h  6 BYTEs    ???
  6153.  2Ah    WORD    file handle for socket or FFFFh
  6154.  2Ch  2 BYTEs    ???
  6155.  2Eh    WORD    nonzero if socket nonblocking
  6156. ---network connections only---
  6157.  30h  2 BYTEs    ???
  6158.  32h    WORD    ???
  6159.  34h  4 BYTEs    (big-endian) IP address of remote
  6160.  38h  6 BYTEs    ???
  6161. --------Q-15DE2F-----------------------------
  6162. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  6163.     AX = DE2Fh
  6164. Return: BX = status
  6165.         0001h keyboard focus has been given to a direct window since the
  6166.         last call
  6167.         0000h if not
  6168. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  6169.     Quarterdeck states that this call will not be available under future
  6170.       versions of DESQview Classic
  6171. --------Q-15DE30-----------------------------
  6172. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  6173.     AX = DE30h
  6174. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  6175. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  6176.     you must first check the DESQview version to verify that it is 2.50 or
  6177.       greater
  6178. SeeAlso: INT 21/AH=2Bh/CX=4445h
  6179. --------Q-15DE31-----------------------------
  6180. INT 15 - DESQview/X v1.10 - ???
  6181.     AX = DE31h
  6182.     CX = ???
  6183.         0000h ???
  6184.         nonzero ???
  6185.     ???
  6186. Return: ???
  6187. --------b-15E00F-----------------------------
  6188. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  6189.     AX = E00Fh
  6190.     ES:BX -> start of 2nd processor's execution
  6191. Return: AL = 0Fh successful
  6192.        = 00h failure
  6193. SeeAlso: AX=E10Eh,AX=E200h
  6194. --------b-15E10E-----------------------------
  6195. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  6196.     AX = E10Eh
  6197.     ES:BX -> start of 2nd processor's execution
  6198. Return: AL = 0Fh successful (halted)
  6199.        = 00h failure (not halted)
  6200. SeeAlso: AX=E00Fh,AX=E200h
  6201. --------b-15E200-----------------------------
  6202. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  6203.     AX = E200h
  6204. Return: AX = 8000h if 2nd processor available
  6205. SeeAlso: AX=E00Fh,AX=E10Eh
  6206. ----------15E4-------------------------------
  6207. INT 15 - Tandy??? - ???
  6208.     AH = E4h
  6209.     AL = subfunction
  6210.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  6211.     DL = ???
  6212. Return: DL = 00h if successful???
  6213. Note:    the section of code in 386MAX which calls these functions also checks
  6214.       whether the ROM BIOS has both Tandy and Phoenix Technologies
  6215.       signatures if these calls fail
  6216. --------m-15F200CX454D-----------------------
  6217. INT 15 - Tandon memory mapper - Tandon MAPPER HARDWARE INITIALISATION CHECK ???
  6218.     AX = F200h
  6219.     CX = 454Dh
  6220. Return: CF clear if hardware already initialised
  6221.         BX = upper RAM areas in use
  6222.         bit 0: C000-C3FF
  6223.         bit 1: C400-C7FF
  6224.         ...
  6225.         bit 11: EC00-EFFF
  6226.     CF set if hardware not initialised yet
  6227. --------!------------------------------------
  6228.